2012-11-27 39 views
7

Tôi có phương thức getCalendarFromClass trả về cho tôi một đối tượng là Calendar.Thời gian Joda - Chuyển đổi đối tượng Lịch sang LocalDate

Và tôi đang chuyển đổi nó thành LocalDate API thời gian Joda bằng phương pháp fromCalendarFields.

LocalDate.fromCalendarFields(a.getCalendarFromClass()); 

Nhưng cách chỉ định TimeZone khi thực hiện chuyển đổi này vì tôi không tìm thấy nó trong javadoc.

Các javadoc cho fromCalendarFields phương pháp đề cập đến:

Mỗi trường được truy vấn từ Lịch và gán cho LOCALDATE. Điều này rất hữu ích nếu bạn đã sử dụng Lịch làm ngày địa phương, bỏ qua vùng đó.

Trả lời

7

Calendar có múi giờ và sẽ được sử dụng (theo số Calendar) khi Joda Time yêu cầu các giá trị trường khác nhau. Thời gian Joda chỉ sử dụng calendar.get(Calendar.YEAR) v.v.

Trả lại LocalDate không có múi giờ, theo khái niệm.

+0

db từ nơi tôi nhận được lịch có múi giờ như GMT nhưng trước tiên tôi muốn chuyển đổi nó thành EST và sau đó xử lý nó – Abubakkar

+0

@Abu: Bạn có nghĩa là bạn muốn lấy * instant * được lưu trữ và chuyển nó thành EST (mà tôi cho rằng bạn có nghĩa là EDT/EST tùy thuộc vào ngày)? Nếu vậy, chỉ cần đặt múi giờ trên 'Lịch' thành múi giờ đúng trước khi chuyển sang' LocalDate'. –

1

LocalDate không giống như lớp bạn muốn. Từ doc:

LOCALDATE là một lớp datetime bất biến đại diện cho một ngày mà không một múi giờ.

(tôi nhấn mạnh)

9

1) Lấy múi giờ:

TimeZone tz = calendar.getTimeZone(); 

2) Tạo một Joda DateTime từ Lịch:

DateTimeZone jodaTz = DateTimeZone.forID(tz.getID()); 
DateTime dateTime = new DateTime(calendar.getTimeInMillis(), jodaTz); 

3) Nhận một LOCALDATE

LocalDate localDate = dateTime.toLocalDate(); 
Các vấn đề liên quan