Offset值会处理Java中的夏令时时区吗?

Mil*_*oya 1 java timezone datetime jodatime

TimeZone.setDefault(TimeZone.getTimeZone("GMT-7:00"));
Run Code Online (Sandbox Code Playgroud)

这会处理夏令时时区吗?

或者

仅需要区域名称,例如:“America/Lost_Angeles”?

Ole*_*.V. 5

您可能知道,洛杉矶在一年中的标准时间期间位于偏移量 \xe2\x88\x9208:00 ,在夏令时 (DST) 期间位于偏移量 \xe2\x88\x9207:00 (就像现在)。其他时区在一年中的部分时间或全部时间使用偏移量 -07:00。美洲/菲尼克斯全年使用 -07:00。美国/丹佛标准时间使用 -07:00,夏季使用 -06:00。

\n\n

Java 不是思想读者,因此没有机会猜测到 -07:00 您可能指的是这些时区之一或也使用 -07:00 的许多其他时区之一。因此,当您要求 -07:00 时,您全年都会得到 -07:00。

\n\n
\n

这会处理夏令时时区吗?

\n
\n\n

不。

\n\n
\n

或者

\n\n

只需要区域名称,如:\'America/Los(t)_Angeles\'?

\n
\n\n

是的。

\n\n

我建议您不要使用该类TimeZone。它的设计很糟糕并且已经过时了。而是使用ZoneId现代 Java 日期和时间 API java.time。或者,如果您\xe2\x80\x99已经在使用Joda-Time,那么它DateTimeZone也是一个选项,但Joda-Time项目处于维护模式,不建议用于新代码。

\n\n

特别是不要\xe2\x80\x99t 使用TimeZone.setDefault(). 这将影响程序的每个部分以及在同一 JVM 中运行的所有其他程序。最好的解决方案是在所有日期时间操作中明确时区,以便您独立于任何默认时区设置。如果由于某种原因您无法执行此操作(也许您现在无法承担对代码库的更改),请在启动程序时从命令行设置默认时区。例如:

\n\n
java -Duser.timezone=America/Los_Angeles YourJavaMainClass\n
Run Code Online (Sandbox Code Playgroud)\n\n

链接: tz 数据库时区列表,包括一年中部分或全年使用偏移量 -07:00 的 36 个时区。

\n