在解析时间瞬间,我在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
答案 0 :(得分:3)
这两个日期都是星期二。如果你纠正这个并将2013年1月5日定为星期六(原来的话),那么它可以工作:
DateTime startTime = dateStringFormat.withOffsetParsed().parseDateTime("Tue Jan 01 09:30:00 GMT+2000 2013");
DateTime endTime = dateStringFormat.withOffsetParsed().parseDateTime("Sat Jan 05 10:31:00 GMT+2000 2013");
看起来无法通过Joda Time检查日期是否有效:
答案 1 :(得分:2)
这种情况正在发生,因为在这种情况下endTime
表示错误的日期 - 意味着Jan 05 2013
不是星期二,而实际上是星期六
这有效:
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("Sat Jan 05 10:31:00 GMT+2000 2013");
System.out.println(dateStringFormat.print(startTime));
System.out.println(dateStringFormat.print(endTime));
<强>输出:强>
Tue Jan 01 09:30:00 GMT+2000 2013
Sat Jan 05 10:31:00 GMT+2000 2013
看起来Joda时间正在使用当天进行解析。将Tuesday
切换为Saturday
会将日期翻转为Jan 05
,,无论格式模式中的订单是
DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern("MMM dd EEE kk:mm:ss 'GMT'Z yyyy");
DateTime endTime = dateStringFormat.withOffsetParsed().parseDateTime("Jan 01 Sat 10:31:00 GMT+2000 2013");
DateTime startTime = dateStringFormat.withOffsetParsed().parseDateTime("Jan 01 Tue 09:30:00 GMT+2000 2013");
<强>输出:强>
Jan 01 Tue 09:30:00 GMT+2000 2013
Jan 05 Sat 10:31:00 GMT+2000 2013