我在解析時間瞬間發現JodaTime中的某種不當行爲。Joda期間不是打印日
DateTimeFormatter dateStringFormat =
DateTimeFormat.forPattern("EEE MMM dd kk:mm:ss 'GMT'Z yyyy");
DateTime startTime = dateStringFormat.withOffsetParsed().
parseDateTime("Tue Jan 01 09:30:00 GMT+2000 2013");
DateTime endTime = dateStringFormat.withOffsetParsed().
parseDateTime("Tue Jan 05 10:31:00 GMT+2000 2013");
Period period = new Period(startTime, endTime);
PeriodFormatter formatter = new PeriodFormatterBuilder().appendDays()
.appendSuffix(" day ", " days")
.appendHours()
.appendSuffix(" hour ", " hours")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.toFormatter();
System.out.println(formatter.print(period));
輸出爲: 「1小時經濟了1分鐘」
哪裏是 「天」 的一部分?
羅勒布爾克的版本代碼...
一天的日莫名其妙地被解析爲01,而不是05年第二日期時間。
DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern("EEE MMM dd kk:mm:ss 'GMT'Z yyyy");
DateTime startTime = dateStringFormat.withOffsetParsed().parseDateTime("Tue Jan 01 09:30:00 GMT+2000 2013");
DateTime endTime = dateStringFormat.withOffsetParsed().parseDateTime("Tue Jan 05 10:31:00 GMT+2000 2013");
轉儲到控制檯...
System.out.println("startTime: " + startTime);
System.out.println("endTime: " + endTime);
運行時...
startTime: 2013-01-01T09:30:00.000+20:00
endTime: 2013-01-01T10:31:00.000+20:00
我已確認的問題。但是您可以從示例代碼的後半部分中刪除所有的Period和「formatter」代碼。問題出現在解析中,兩個DateTime實例中的日期都是01,但第二個DateTime應該是05.我會將更簡單的代碼粘貼到您的問題中。如果你願意,你可以刪除或編輯。 –
我可以確認這兩個答案[由LaurentG](http://stackoverflow.com/a/21088329/642706)和[由PopoFibo](http://stackoverflow.com/a/21088302/642706)是正確的。在第二個DateTime中將「Tue」更改爲「Sat」可修復問題。那個日期格式很討厭!堅持[ISO 8601](http://en.wikipedia。org/wiki/ISO_8601)標準格式:'2013-01-05T10:31:00 + 20:00' –