2009-08-25 45 views
52

Đoạn mã này luôn phân tích cú pháp ngày thành múi giờ hiện tại và không phân tách múi giờ trong chuỗi đang được phân tích cú pháp.Làm cách nào để phân tích ngày bao gồm múi giờ với Thời gian Joda

final DateTimeFormatter df = DateTimeFormat 
     .forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy"); 
final DateTime dateTime = df 
     .parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009"); 
System.out.println("dateTime = " + dateTime); 
// outputs dateTime = 2009-08-24T04:36:46.000+02:00 

Nó ra:

dateTime = 2009-08-24T04:36:46.000+02:00 

trong khi tôi mong đợi:

dateTime = 2009-08-24T04:36:46.000+10:00 

Bất kỳ ý tưởng những gì tôi đang làm sai?

Trả lời

73

OK, tiếp tục Googling đã cho tôi câu trả lời cho câu hỏi của riêng tôi: sử dụng withOffsetParsed(), như vậy:

final DateTimeFormatter df = DateTimeFormat 
     .forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy"); 
final DateTime dateTime = df.withOffsetParsed() 
     .parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009"); 

này hoạt động.

+5

Bạn nên chấp nhận câu trả lời của bạn. –

+2

Cảm ơn: D Bạn là một người giàu có! – mgonto

+6

IMO, hành vi mặc định của 'DateTimeFormatter' dường như vi phạm" nguyên tắc ít ngạc nhiên nhất ", đặc biệt là trong bối cảnh của một người không sửa đổi. Cảm ơn Steve vì đã khai quật 'withOffsetParsed()'. –

32

bạn cũng có thể chọn:

// parse using the Paris zone 
DateTime date = formatter.withZone(DateTimeZone.forID("Europe/Paris")).parseDateTime(str); 
Các vấn đề liên quan