使用java.time
包:
我正在将自由插入的日期时间(年、月、日、小时、分钟)的用户输入转换为 a LocalDateTime
,然后根据用户的时区转换为 a ZonedDateTime
。
爱沙尼亚的例子:
LocalDateTime local = LocalDateTime.of(2018, 10, 28, 3, 30); // October 28th 03:30 ZonedDateTime zoned = local.atZone(ZoneId.of("Europe/Tallinn"));
上述时间 03:30 可能意味着时间线上的两个实例,因为 2018 年 10 月 28 日,爱沙尼亚的夏令时结束。在 04:00 GMT+3 时,时钟更改为 03:00 GMT+2,这意味着当天两次到达 03:30。根据的文档atZone()
,转换的结果时间是夏令时 03:30 GMT+3(强调我的):
在大多数情况下,本地日期时间只有一个有效偏移量。在重叠的情况下,时钟被调回,有两个有效的偏移量。此方法使用通常对应于“夏季”的较早偏移量。
我想要的是不要隐式地进行这种转换。相反,我想捕获一个异常并通知用户有关不明确的输入。似乎有一种方法可以做到这一点,但我不明白为什么该方法是静态的并接受三个参数。如何在我的情况下正确使用它?来自相同的文档:
要在存在间隙或重叠时引发异常,请使用
ZonedDateTime.ofStrict(LocalDateTime, ZoneOffset, ZoneId)
.
为什么它要求ZoneOffset
争论?在我看来,我所需要的只是一个LocalDateTime
and ZoneId
。否则,每次转换为ZonedDateTime
,我怎么知道是使用 GMT+2 还是 GMT+3 的偏移量?这是我希望 Java 告诉我的事情,或者如果两者都适用则抛出异常。
桃花长相依
相关分类