始终在UTC中运行Java应用程序
以下两种方法是否完全等效,以确保Java应用程序以UTC运行始终在UTC中运行Java应用程序,java,Java,以下两种方法是否完全等效,以确保Java应用程序以UTC运行 使用“user.timezone”参数启动JVM: java -jar MyJar.jar -Duser.timezone=UTC 从main()方法执行以下方法(Java 8) 我想让应用程序在UTC中运行成为非可选的,因此JVM参数方法是不可取的。没有迹象表明这两种方法是不等效的。 唯一的区别是变量1在进入main()之前设置默认时区 因此,在调用setUtcTimezone()之后,这两个变体是等效的,而在调用之前则不是。
java -jar MyJar.jar -Duser.timezone=UTC
我想让应用程序在UTC中运行成为非可选的,因此JVM参数方法是不可取的。没有迹象表明这两种方法是不等效的。 唯一的区别是变量1在进入main()之前设置默认时区 因此,在调用
setUtcTimezone()
之后,这两个变体是等效的,而在调用之前则不是。
因此,您可以有一个静态初始值设定项,它在调用main之前使用时区
但这是你的责任
使用变体2没有任何陷阱,使用它,它会起作用。
我使用的方法稍微短一点
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
这两种变体中唯一的弱点是相信没有其他代码
更改默认时区。
因此,对于在日期格式化中使用UTC的特定方法,最好使用DateFormatter(不是静态的,可以是实例或使用Thread.Local()),并显式地将时区UTC设置为该格式化程序。
然后将其保存为输出或以UTC计算
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));