2014-09-24 20 views
11

Tôi đang cố gắng để có được số tuần của một LOCALDATE đầy đủ với các định dạng:Nhận Tuần Số LOCALDATE (Java 8)

dd.MM.yyy 

tôi đã không tìm thấy một hàm trong Java 8 ngày API Mà trả về Số Tuần và tôi đã cố tạo một thuật toán, nhưng nó không hoạt động.

Trả lời

20

Một cảnh báo nhỏ. Tôi đã không kiểm tra này, nhưng nhìn vào tài liệu API của WeekFieldsLocalDate.get, bạn nên làm một cái gì đó như:

LocalDate date = ...; 
// Or use a specific locale, or configure your own rules 
WeekFields weekFields = WeekFields.of(Locale.getDefault()); 
int weekNumber = date.get(weekFields.weekOfWeekBasedYear()); 
+4

Cẩn thận về Locale.getDefault(). Ở một số nơi (ví dụ: Canada), nó có thể trở lại một tuần bắt đầu vào Chủ nhật. Sử dụng "Locale.ISO" trong tuần bắt đầu vào thứ Hai. –

+1

Không có Locale.ISO, nhưng có 'WeekFields.ISO' –

24

Câu trả lời của Mark Rotteveel là gần như ngay và một lần nữa một ví dụ mà loại tiềm năng nhầm lẫn có nằm trong lớp WeekFields (các tên phương thức nghe tương tự, nhưng lệch khỏi cách sử dụng dân sự trực quan). Mã bản quyền đòi hỏi lĩnh vực khác:

LocalDate date = LocalDate.now(); 
TemporalField woy = WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear(); 
int weekNumber = date.get(woy); 

Xem thêm các cuộc tranh luận tương tự trên SO-post này, đặc biệt là các cuộc thảo luận và nhận xét về câu trả lời của @kleopatra.

+0

Tôi đã cập nhật câu trả lời của mình dựa trên câu trả lời của bạn. Tôi không có quyền truy cập vào Java 8 ở đây, vì vậy tôi phải đoán (và có vẻ như tôi đã không đọc ['WeekFields'] (http://docs.oracle.com/javase/8/docs/api /java/time/temporal/WeekFields.html) tài liệu lớp học chặt chẽ, vì nó giải thích sự khác biệt này –

+0

@MarkRotteveel OK, bây giờ bạn có upvote của tôi ;-) Đối với tôi, tên "weekOfWeekBasedYear" là quá kỹ thuật và vẫn gây phiền nhiễu . Ngay cả giấy ISO-8601 không chứa thuật ngữ này (nó chỉ sử dụng các thuật ngữ như "tuần lịch" hoặc "ngày trong tuần"). –

+1

Cẩn thận về Locale.getDefault(). Ở một số nơi (ví dụ: Canada), nó có thể trở lại một tuần bắt đầu vào Chủ nhật. Sử dụng "Locale.ISO" trong tuần bắt đầu vào thứ Hai. –

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