将服务器时间更改为 EST

Change server time to EST

在我的后端,我使用的是 Springboot。

我希望能够将服务器时间设置为美国东部时间,这样当我执行类似以下操作时:

Date() 那个时间是美国东部时间。这可能吗?

您无法从 Java 更改服务器计算机的时区。如果您想在服务器级别执行此操作,那么您可能需要咨询服务器设置;但是,如果您正在寻求在应用程序级别解决此问题,则可以在 Spring Context 中注册一个格式化日期对象的 bean,然后将其注入到您希望的任何位置。

请注意,如果它是 java.util.Date,那么您应该使用 DateFormat 实例并在其中设置所需的时区。然后在 Date 实例中使用该对象。日期 class 本身不包含任何时区信息,因此您无法在日期对象上设置时区。

TL;DR: 不,那不可能。

消息:

  1. 虽然可能会扰乱 JVM 的默认时区,但不建议这样做,因为它不仅会影响程序的所有部分,还会影响同一 JVM 中的所有其他程序 运行。相反,您程序的每个部分和同一 JVM 中的每个程序 运行 都可能将默认时区设置为您不想要的内容,因此依赖它是脆弱的。而是为您的日期和时间操作提供明确的时区。您可以在程序中配置时区设置(例如通过属性文件)并使用您配置的时区。
  2. 当询问 EST 时,如果你指的是东部标准时间,在大多数地方你显然只能在一年中的标准时间获得,而不是在 DST/summer 时间。
  3. 当询问 [​​=11=] 时,class 不能包含时区,这显然阻止了你的询问。

对带时区的日期和时间使用ZonedDateTime

    ZoneId eastern = ZoneId.of("Australia/Victoria");
    ZonedDateTime now = ZonedDateTime.now(eastern);
    
    System.out.println(now);

刚才运行ning时的输出:

2020-07-08T02:54:50.528310+10:00[Australia/Victoria]

这次是澳大利亚东部标准时间,缩写为 AEST 或简称为 EST。但是,如果您 运行 10 月 4 日之后的代码,您将改为使用澳大利亚东部夏令时(AEDT、EDT 或 EDST)。

如果您想要北美东部标准时间,您可以尝试 America/TorontoAmerica/New_York。他们现在会给你 EDT,11 月 1 日后给你 EST。

不过,有些时区全年都会为您提供东部标准时间,例如澳大利亚的 Australia/Brisbane 和北美的 America/Cancun

ZonedDateTime 是 java.time 的一部分,现代 Java 日期和时间 API。我建议您始终使用 java.time,永远不要使用设计糟糕且过时已久的 Date class.

链接

  • Oracle tutorial: Date Time 解释如何使用 java.time.
  • 相关问题:How to set a JVM TimeZone Properly
  • 相关问题:TimeZone problem in Java