jodatime localdatetime的间隔

时间:2013-03-18 23:12:42

标签: java jodatime

当我打字时,我自己想出来了。我将为包括我在内的未来用户回答我自己的问题。

我希望能够在一个时间间隔内保存到LocalDateTime个对象,但似乎不允许这样做。当我这样做时:

    LocalDateTime start = new LocalDateTime();

    LocalDateTime end = start.plusMinutes( 30 );

    Interval interval = new Interval( start, end );

我遇到编译问题。我认为这是因为LocalDateTime不是ReadableInstant

是否有合适的解决方法?

看起来这是可能的:

期间段=新期间(开始,结束);

但是你失去了“getStart \ End”方法。

1 个答案:

答案 0 :(得分:4)

要将IntervalLocalDateTime一起使用,您必须这样做:

Interval interval = new Interval( start.toDateTime(), end.toDateTime() );

由于时间将从本地时区转换而您知道您正在处理的时区,因此生成的时间使调试变得容易。但是,在夏令时期间会出现问题。要解决这个问题,请将结果强制转移到DateTimeZone.UTC,在这种情况下,您将丢失与时间相关的时区数据(如果您真的开始使用LocalDateTime,那么您通常不关心这些数据,但请确保使用它始终如一,永远不会在没有转换的情况下构建Interval

Interval interval = new Interval( 
  start.toDateTime(DateTimeZone.UTC), end.toDateTime(DateTimeZone.UTC) );

以下测试证明了这一点(假设您在EST时区)

@Test
public void testLocalDateTimeDST() {
    LocalDateTime dst_2017_03_12 = LocalDateTime.parse("2017-03-12T02:01:00");
    System.out.println(dst_2017_03_12);
    try {
        System.out.println(dst_2017_03_12.toDateTime());
        Assert.fail("Should've thrown an IllegalInstantException");
    } catch (IllegalInstantException e) {

    }
    System.out.println(dst_2017_03_12.toDateTime(DateTimeZone.UTC));
}