将服务器时间更改为EST

发布时间:2020-07-07 15:52

在后端,我正在使用Springboot。

我希望能够将服务器时间设置为EST,这样当我执行以下操作时:

Date()该时间是美国东部时间。有可能吗?

回答1

TL; DR:不,那不可能。

消息:

  1. 虽然可能会干扰JVM的默认时区,但不建议这样做,因为它不仅会影响程序的所有部分,还会影响在同一JVM中运行的所有其他程序。相反,您的程序的每个部分以及在同一JVM中运行的每个程序都可能会将默认时区设置为您不需要的时区,因此依赖它很脆弱。而是为您的日期和时间操作提供明确的时区。您可以在程序中配置时区设置(例如通过属性文件),然后使用已配置的时区。
  2. 在询问EST时,如果用“东部标准时间”来表示,那么在大多数地方,您显然只能在一年的标准时间内(而不是DST /夏令时)获得该信息。
  3. 在询问Date时,该课程无法设置时区,这显然会阻止您提出要求。

ZonedDateTime用于带有时区的日期和时间

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

刚刚运行时的输出:

2020-07-08T02:54:50.528310 + 10:00 [澳大利亚/维多利亚]

这是澳大利亚东部标准时间,简称AEST或EST。但是,如果您在10月4日之后运行代码,则将获得澳大利亚东部夏令时间(AEDT,EDT或EDST)。

如果您打算使用北美东部标准时间,则可以尝试America/TorontoAmerica/New_York。他们会在11月1日之后为您提供美国东部夏令时间(EST)。

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

ZonedDateTime是现代Java日期和时间API java.time的一部分。我建议您始终使用java.time,而不要使用设计欠佳且过时的Date类。

链接

回答2

您不能从Java更改服务器计算机的时区。如果要在服务器级别上执行此操作,则可能需要查询服务器设置;请参阅第11页的『设置服务器设置』。但是,如果要在应用程序级别解决此问题,则可以在Spring Context中注册具有格式的Date对象的bean,然后将其注入到任意位置。

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