我看到了Force Java timezone as GMT/UTC
我尝试过
user.timezone=UTC
中的{li> config/application.properties
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>
但是它会打印出来
System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo [id =“ America / New_York”,offset = -18000000,dstSavings = 3600000,useDaylight = true,transitions = 235,lastRule = java.util.SimpleTimeZone [id = America / New_York,偏移量= -18000000,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]]
Spring Boot 1.5.19,Java 8
答案 0 :(得分:1)
好吧,根据您的问题,您有两种选择:
在参数行user.timezone的pom.xml设置中,在surefire设置systemPropertyVariables中的属性之前:
<plugin>
...
<configuration>
<argLine>-Duser.timezone=UTC</argLine>
</configuration>
...
</plugin>
在您的Application类或某些Configuration类中以及在方法setDefault Time Zone to UTC中创建一个初始化方法:
@PostConstruct
public void init() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
// OR you can use the line below
// System.setProperty("user.timezone", "UTC")
}
答案 1 :(得分:1)
您可以使用带有@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());
}
}
答案 2 :(得分:1)
我认为您可以在应用程序级别设置应用程序的时区。我认为此链接将为您提供帮助。 https://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-settimezone.html
因此,您需要做的是向“ @SpringBootApplication”注释所在的主类中添加“ @PostConstruct”注释,然后在其中添加时区设置方法。这是一个例子。
@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"));
}
}
希望这可以为您提供帮助!
答案 3 :(得分:0)
如果要将JVM选项从Maven Spring Boot插件传递到派生的Spring Boot应用程序,请使用spring-boot.run.jvmArguments
property:
<properties>
<spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
</properties>
这等效于命令行语法:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Duser.timezone=UTC"
或运行完全打包的Spring Boot应用程序时:
java -Duser.timezone=UTC -jar app.jar
答案 4 :(得分:0)
如果您的应用程序在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。
答案 5 :(得分:-1)
<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties>
那对我没用。
但是,如果您使用 jvmArguments ,那对我有用。 参考:official docs…
仅 <configuration> <jvmArguments>-Duser.timezone=UTC</jvmArguments> </configuration>