Mar 12, 2017 02:39:00 "America/Chicago"
不存在。当我将日期和时间设置为此值时,它不会失败。时间设置为Mar 12, 2017 03:39:00
一个小时后。我怎么能得到通知,这个时间不存在。这是时间向前跳跃的方式
01:59:59
3:00:00
如您所见02:39:00
,此日期永远不会存在。
这是我正在使用的代码
package com.company;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.of("America/Chicago");
ZonedDateTime dateTimeStart = ZonedDateTime.of(2017, 1, 1, 15, 39, 0, 0, ZoneId.of("America/Chicago"));
ZonedDateTime dateTimeStartUtc = dateTimeStart.withZoneSameInstant(ZoneOffset.UTC);
ZoneId zoneIdDst = ZoneId.of("America/Chicago");
ZonedDateTime dateTimeStartDst = ZonedDateTime.of(2017, 3, 12, 2, 39, 0, 0, ZoneId.of("America/Chicago"));
ZonedDateTime dateTimeStartUtcDst = dateTimeStart.withZoneSameInstant(ZoneOffset.UTC);
int y = 90;
}
}
您的示例不会因为
ZonedDateTime.of(..)
调整日期时间而引发异常。该javadoc的状态您可以
ZonedDateTime#ofStrict(LocalDateTime, ZoneOffset, ZoneId)
用来执行验证。您首先需要构建一个
LocalDateTime
. 然后你会得到ZoneOffset
你ZoneId
的本地日期时间。然后,您可以将所有三个都提供给ofStrict
.例如,
ZoneId zoneId = ZoneId.of("America/Chicago"); LocalDateTime ldt = LocalDateTime.of(2017, 3, 12, 2, 39, 0, 0); ZoneOffset zoneOffset = zoneId.getRules().getOffset(ldt); ZonedDateTime zdt = ZonedDateTime.ofStrict(ldt, zoneOffset, zoneId);
会扔