gpt4 book ai didi

java - Clock.systemUTC() 和 Clock.systemDefaultZone() 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 14:13:12 36 4
gpt4 key购买 nike

我在看 Clock来自java的类,以便我可以将其作为依赖项注入(inject)以获得更好的可测试性。但是我不明白这两种方法的区别systemUTCsystemDefaultZone . Instant.now()似乎在内部使用 systemUTC时钟而 YearMonth.now()使用 systemDefaultZone钟。我已经阅读了 javadoc,但对我来说不是很清楚。
我有使用 Instant.now() 的代码和 YearMonth.now()并想通过一些示例来了解两个时钟之间的区别,其中错误地使用每个时钟可能会导致问题。

最佳答案

instant而言Clock.systemUTC 返回的两个时钟的方法和 Clock.systemDefaultZone ,他们会做同样的事情。他们的两个文档都说时钟“基于最佳可用系统时钟”。所以创建 Instant s 使用时钟将始终为您提供相同的瞬间。
当您尝试创建日期或时间时,行为会有所不同。 systemUTC做这个:

Conversion from instant to date or time uses the UTC time-zone.


鉴于 systemDefaultZone做这个:

converting to date and time using the default time-zone.


因此,尽管如果您问他们当前时刻是什么,两者都会返回相同的时刻,但它们不一定会返回相同的 LocalDateTime , 或 LocalDate , 或 ZonedDateTime .例如,假设我的系统时区是 Asia/Shanghai ,全年偏移 UTC+8。现在是 2020-07-29 上海时间凌晨 5 点。如果我这样做 LocalDate.now(Clock.systemUTC()) ,它会告诉我 2020-07-28 ,因为它仍然是 UTC 时区的 28 日。如果我这样做 LocalDate.now(Clock.systemDefaultZone()) ,但是,它会告诉我 2020-07-29 , 因为上海是2020-07-29(系统时区)。
现在你应该明白为什么无参数 now日期/时间相关的类使用 systemDefaultZone .如果我这样做会很奇怪 LocalTime.now()在上海,看到时间早了8个小时!

关于java - Clock.systemUTC() 和 Clock.systemDefaultZone() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63148324/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com