gpt4 book ai didi

java - LocalDateTime.now() 错误的时间

转载 作者:行者123 更新时间:2023-11-29 04:15:37 25 4
gpt4 key购买 nike

我正在使用 LocalDateTime.now() 获取系统的日期和时间,但时间是过去一个小时。

如果系统有 14:52,now() 返回 13:52。

系统操作系统为Windows 10。

最佳答案

LocalDateTime 是错误的类

永远不要使用 LocalDateTime 来表示时刻,即时间轴上的特定点。这种类型故意缺少任何时区或与 UTC 的偏移量的概念,代表 潜在 大约 26-27 小时范围内的时刻(全局时区范围)。

当前时刻

要获取 UTC 的当前时刻,请使用 Instant

Instant instant = Instant.now() ;

要获取特定地区(时区)人们使用的挂钟时间中的当前时刻,请使用 ZonedDateTime

我怀疑您的问题是您预期的时区实际上不是代码运行时的当前默认时区。在您的代码中,您未能指定时区,因此静默应用了 JVM 当前的默认时区。您可以通过调用 ZoneId.systemDefault().toString() 来验证当前默认值。

在我看来,隐式依赖 JVM 当前的默认时区是一种不好的做法。最好始终明确指定您想要/期望的时区。始终传递可选的 ZoneId 参数。

ZoneId z = ZoneId.of( "America/Montreal" ) ; // Or get the JVM’s current default time zone: ZoneId.systemDefault() 
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

您可以直接与您的数据库交换java.time 对象。使用 JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。 Hibernate 5 和 JPA 2.2 支持 java.time

从哪里获取 java.time 类?

关于java - LocalDateTime.now() 错误的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554809/

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