为了与您一起使用Interval
,LocalDateTime
您必须这样做:
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));
}