【发布时间】:2014-01-31 23:30:40
【问题描述】:
在解析时间瞬间时,我在 JodaTime 中发现了某种不当行为。
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 分钟”
“天”部分在哪里?
Basil Bourque 的代码版本……
在第二个 DateTime 中,月份日期莫名其妙地被解析为 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
【问题讨论】:
-
我已经确认了这个问题。但是您可以从示例代码的后半部分中删除所有句点和“格式化程序”代码。问题出在解析中,两个 DateTime 实例中的日期都是 01,但第二个 DateTime 应该是 05。我会将更简单的代码粘贴到您的问题中。您可以根据需要删除或编辑。
-
我可以确认by LaurentG 和by PopoFibo 的两个答案都是正确的。在第二个 DateTime 中将
Tue更改为Sat可以解决问题。日期格式很讨厌!尽可能坚持使用ISO 8601 标准格式:2013-01-05T10:31:00+20:00