Joda期间不是印刷日

时间:2014-01-13 09:22:57

标签: java datetime jodatime

在解析时间瞬间,我在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

2 个答案:

答案 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