2014-06-18 12 views
6

Có thể phân tích ngày tháng và trích xuất tuần trong tháng bằng cách sử dụng Joda-Time hay không. Tôi biết nó có thể làm điều đó trong tuần của năm nhưng tôi không thể tìm thấy làm thế nào/nếu nó có thể trích xuất tuần của tháng.Nhận tuần trong tháng với Joda-Time

Ví dụ: 2014-06_03 nơi 03 là tuần thứ ba của tháng này

DateTime dt = new DateTime(); 
String yearMonthWeekOfMonth = dt.toString("<PATTERN for the week of month>"); 

Tôi đã thử mô hình "yyyyMMW" nhưng nó không được chấp nhận.

Trả lời

4

Phiên bản joda-time hiện tại không hỗ trợ tuần trong tháng, vì vậy bạn nên sử dụng một số giải pháp thay thế.
1) Ví dụ, bạn có thể sử dụng phương pháp tiếp theo:

static DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM_'%d'"); 
    static String printDate(DateTime date) 
    { 
     final String baseFormat = FORMATTER.print(date); // 2014-06_%d 
     final int weekOfMonth = date.getDayOfMonth() % 7; 
     return String.format(baseFormat, weekOfMonth); 
    } 

Cách sử dụng:

DateTime dt = new DateTime(); 
String dateAsString = printDate(dt); 

2) Bạn có thể sử dụng Java 8, vì API của Java hỗ trợ tuần của trường tháng.

java.time.LocalDateTime date = LocalDateTime.now(); 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM_W"); 
    System.out.println(formatter.format(date)); 
+0

Cảm ơn bạn đã trả lời, cuối cùng với SimpleDateFormat đã làm các trick cho tôi, nhưng nó là tốt để biết rằng nó được hỗ trợ bởi Java 8 – tbo

+2

Correction cho giải pháp đầu tiên: 'final int weekOfMonth = (date.getDayOfMonth()/7) + 1;' – snaikar

5

tùy chọn trong Joda Đây có lẽ là đẹp hơn:

Weeks.weeksBetween(date, date.withDayOfMonth(1)).getWeeks() + 1 
+0

Chỉ cần chú ý rằng nếu 'date> thì date.withDayOfMonth (1)' code ở trên trả về giá trị âm, ít nhất là cho ' joda-time 2.9.1', không biết là lỗi hay hành vi dự định, nhưng theo API nó phải là '.. (bắt đầu, kết thúc)', 'public static Weeks weeksBetween (ReadablePartial start, Re adablePartial end) ', http://joda-time.sourceforge.net/apidocs/org/joda/time/Weeks.html#weeksBetween(org.joda.time.ReadableInstant, org.joda.time.ReadableInstant) – Anatoly

+0

bạn có thể luôn luôn làm Weeks.weeksTrước khi (ngày1.bước trước (ngày2)? date1: date2, date1.isTrước khi (ngày2)? date2: date1)). getWeeks() + 1 – FrankMonza

Các vấn đề liên quan