【发布时间】:2021-01-03 00:32:43
【问题描述】:
我想以秒为单位来确定系统时区是领先还是落后于远程时区。这里的远程时区值是我从数据库中获取的“GMT”。它可能是“美国/东部”,我将其转换为“美国/纽约”。但是对于 GMT,我得到了错误。
ZoneId.systemDefault().getRules().getOffset(Instant.now()).getTotalSeconds()
- ZoneId.of("GMT").getRules().getOffset(Instant.now()).getTotalSeconds()
但它给出了以下错误,
Exception in thread "main" java.time.DateTimeException: Invalid ID for ZoneOffset, invalid format:
at java.time.ZoneOffset.of(Unknown Source)
at java.time.ZoneId.of(Unknown Source)
at java.time.ZoneId.of(Unknown Source)
如何解决这个错误? 用什么代替 GMT ??
【问题讨论】:
-
GMT 并不是真正的时区。我不知道它是什么好名字,但它是“在英国大约半年观察到的东西”。你能提供更多关于你想要达到的目标的信息吗?
-
@JonSkeet - 我已经更新了问题..请检查。
-
“这里的远程时区值是“GMT”,我从数据库中获取”——这是第一个问题,因为“GMT”不是时区。 UTC 也不是,非常严格来说,但通常被接受为一个。因此,假设这是实际含义,您可能只想将“GMT”转换为“UTC”。但是您应该确定 is 是否是数据库中以“GMT”为值的条目所期望的。如果它们实际上的意思是“英国”,那么您应该改用 Europe/London,但这有很大不同
-
"GMT" 对于
ZoneId.of(String)来说是完全有效的输入。无需转换。这里的问题在其他地方。