Mik*_*ike 3 java datetime java-time java.time.instant localdatetime
在爪哇,
Instant表示时间点,编码为 UTC 格式的日期和时间。LocalDateTime表示一个时间点,编码为 JVM 本地时区中的日期和时间。那么为什么LocalDateTime.ofInstant()需要 aZoneId作为第二个参数呢?
这LocalDateTime不仅会造成混乱并且可能不正确,而且会使其与ZonedDateTime;相同。因为 的时区LocalDateTime可以是任何时区,就像ZonedDateTime.
并
LocalDateTime表示一个时间点,编码为 JVM 本地时区中的日期和时间。
不,那不是真的。不管“编码为”部分如何(我对此非常怀疑,但我没有足够的知识来反驳), aLocalDateTime并不代表一个时间点。它表示本地日期/时间,不涉及特定时区。任何给定LocalDateTime发生在不同时区的不同时间点。
目前欧洲/伦敦时区的本地日期和时间为 2023-01-26T08:50。(例如)America/New_York 的同一时间点会导致不同的LocalDateTime. 而在 America/New_York,LocalDateTime2023-01-26T08:50 的时间点不同。
对于某些LocalDateTime/时区组合,可能有零个或两个对应的时间点 - 例如,LocalDateTime2022-11-06T01:30 将在 America/New_York 发生在 2022-11-06 05:30:00Z 和 2022- 11-06 06:30:00Z。
希望这足以证明 aLocalDateTime确实不是一个时间点......
LocalDateTime 表示没有时区信息的日期和时间。它用于表示“当地时间”(以我为例,现在当地时间是 2023-01-26 09:50)。即时时间始终为 UTC(例如,现在的时间是 2023-01-26 08:50 UTC)。要在 Instant 和观察者认为的当地时间之间进行转换,您需要知道观察者位置的 ZoneId(例如,对于我来说欧洲/阿姆斯特丹),否则您无法得出当地时间。
需要明确的是,LocalDateTime 并不代表时间点(这就是 Instant 的用途)。扩展一下我的例子,对我来说,当地时间 2023-01-26 09:50 已经过去了,而对于 Jon Skeet(在欧洲/伦敦)来说,当地时间将在不到一个小时的时间内发生)。
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |