3

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

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

    LocalDateTime start = new LocalDateTime();

    LocalDateTime end = start.plusMinutes( 30 );

    Interval interval = new Interval( start, end );

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

有合适的解决方法吗?

看起来这是可能的:

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

但随后您将失去“getStart\End”方法。

4

1 回答 1

4

为了与您一起使用IntervalLocalDateTime您必须这样做:

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

结果时间使调试变得容易,因为时间将从本地时区转换,并且您知道您正在处理的时区。但是,在夏令时期间会出现问题。要解决该问题,将结果强制转换为DateTimeZone.UTC在这种情况下,您将丢失与时间相关的时区数据(如果您实际上是从 LocalDateTime 开始的,您通常不会关心这些数据,但请确保您始终使用它并且永远不要在Interval没有的情况下构建您的 s转换。

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));
}
于 2013-03-18T23:13:36.950 回答