spring 如何强制Sping Boot JVM进入UTC时区?

ca1c2owp  于 2023-09-29  发布在  Spring
关注(0)|答案(8)|浏览(115)

我看到了Force Java timezone as GMT/UTC
我试

  • mvn spring-boot:run -Dexec.args="-Duser.timezone=GMT”
  • mvn spring-boot:run -Dexec.args="-Duser.timezone=UTC”
  • config/application.properties中的user.timezone=UTC
  • user.timezone=GMT
  • 在pom.xml中:
<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <properties>
              <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
            </properties>
        </configuration>
    </plugin>
  • mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Duser.timezone=UTC”

但它会打印出来

System.out.println(TimeZone.getDefault());

太阳效用日历。ZoneInfo[id=“America/New_约克”,offset=-18000000,dstSavings = 3600000,useDaylight =true,transitions=235,lastRule=java.效用SimpleTimeZone[id=America/New_York,offset=-1800000,dstSavings = 3600000,useDaylight =true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay= 1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
Sping Boot 1.5.19、Java 8

qncylg1j

qncylg1j1#

我认为你可以在你的应用程序级别上设置你的应用程序的时区。我想这个链接会对你有帮助。https://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-settimezone.html
所以你需要做的是在“@SpringBootApplication”annotation所在的主类中添加“@PostConstruct”annotation,并在那里添加时区设置方法。这里有一个例子。

@SpringBootApplication
public class HellotimezoneApplication {

    public static void main(String[] args) {
        SpringApplication.run(HellotimezoneApplication.class, args);
    }

    @PostConstruct
    public void init(){
      // Setting Spring Boot SetTimeZone
      TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }

}

希望这能帮到你!

kuarbcqp

kuarbcqp2#

如果你想将JVM选项从Maven Sping Boot Plugin传递到forked Spring Boot应用程序,请使用spring-boot.run.jvmArguments属性:

<properties>
  <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
</properties>

这相当于命令行语法:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Duser.timezone=UTC"

或者当运行完整打包的Sping Boot 应用程序时:

java -Duser.timezone=UTC -jar app.jar
jc3wubiy

jc3wubiy3#

您可以使用一个用@Configuration注解的类来配置时区。您可以将其放在项目中的任何位置。我通常将所有属于这一类别的类存放在一个名为config的包中。确保将@PostConstruct注解添加到实际设置时区的方法中。

import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

@Configuration
public class LocaleConfig {

    @PostConstruct
    public void init() {

        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

        System.out.println("Date in UTC: " + new Date().toString());
    }
}

参见original article

nnvyjq4y

nnvyjq4y4#

后构造有时不起作用,使它预构造为我工作

@EnableSwagger2
@SpringBootApplication(scanBasePackages = { "com.app" })
public class Application {
    
    public static void main(String[] args) {
        System.out.println("Setting the timezone"+TimeZone.getTimeZone("GMT+9:00").getID());
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+9:00"));
        SpringApplication.run(Application.class, args);
    }

    
}
6ovsh4lw

6ovsh4lw5#

如果您的应用程序在Linux下运行,则有更多选项:

设置TZ环境变量

参见“在POSIX系统中,用户可以通过TZ环境变量指定时区”(https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html)。
此选项在任何云环境中都特别有用。

符号链接/etc/locatime

例如,在我的本地系统中,/etc/locatime符号链接到/usr/share/zoneinfo/Europe/Berlin

➜ ls -l /etc/localtime  
lrwxrwxrwx 1 root root 33 22. Jan 23:01 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin

您可以轻松地使用ln -s /usr/share/zoneinfo/GMT /etc/localtime更改符号链接,可能的值可以在/usr/share/zoneinfo/中找到。
此选项也可以通过挂载主机卷在许多云环境中使用,请参阅kubernetes timezone in POD with command and argument

0dxa2lsx

0dxa2lsx6#

当我在intellij上运行单元测试时,这对我来说就像是一种魅力:你必须在junit或maven config的vm参数GMT上添加下面的命令(我不知道为什么UTC对我不起作用,希望这对你有帮助)

-Duser.timezone="GMT+2"
6jjcrrmo

6jjcrrmo7#

<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties>这对我来说不起作用。
但是如果你使用jvmArguments,这对我来说是有效的。参考号:https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/html/.
<configuration> <jvmArguments>-Duser.timezone=UTC</jvmArguments> </configuration>

wmtdaxz3

wmtdaxz38#

-Duser.timezone=UTC在编辑配置-->修改选项-->添加虚拟机选项,以便与我合作

相关问题