当我打字时,我自己想出来了。我将为包括我在内的未来用户回答我自己的问题。
我希望能够在一个时间间隔内保存到LocalDateTime
个对象,但似乎不允许这样做。当我这样做时:
LocalDateTime start = new LocalDateTime();
LocalDateTime end = start.plusMinutes( 30 );
Interval interval = new Interval( start, end );
我遇到编译问题。我认为这是因为LocalDateTime
不是ReadableInstant
。
是否有合适的解决方法?
看起来这是可能的:
期间段=新期间(开始,结束);
但是你失去了“getStart \ End”方法。
答案 0 :(得分:4)
要将Interval
与LocalDateTime
一起使用,您必须这样做:
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));
}