在Java 8上为mavenunit testing设置时区
如何在Java 8上的maven surefire中设置unit testing的时区?
对于Java 7,这曾经使用systemPropertyVariables
就像在以下配置中一样,但是对于Java 8,测试只使用系统时区。
org.apache.maven.plugins maven-surefire-plugin UTC
为什么会这样,我该如何解决?
简短的回答
在user.timezone
设置user.timezone
的属性之前,Java现在更早地读取user.timezone
。 解决方案是使用argLine
更早地设置它:
... -Duser.timezone=UTC
答案很长
Java初始化默认时区,在第一次需要时将user.timezone
考虑在内,然后将其缓存在java.util.TimeZone
。 现在,在读取jar文件时已经发生了这种情况: ZipFile.getZipEntry
现在调用ZipUtils.dosToJavaTime
,它创建一个初始化默认时区的Date
实例。 这不是一个特定的问题。 此程序用于以UTC格式打印时间,但现在使用系统时区:
import java.util.*; class TimeZoneTest { public static void main(String[] args) { System.setProperty("user.timezone", "UTC"); System.out.println(new Date()); } }
通常,解决方案是在命令行上指定时区,如java -Duser.timezone=UTC TimeZoneTest
,或者使用TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
以编程方式设置TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
。
- 如何在Java中将字符串转换为Time对象?
- Java GUI编辑器为快速开发和可维护性提供了什么(即Eclipse / SWT和Netbeans / Matisse)?
- hibernate中的createSQLQuery使用Prepared Statement?
- 在macOS Sierra 10.12.1上安装rJava:链接器错误licuuc
- Java中的Interactive Map查看器桌面应用程序
- Java中的电子邮件validation的正则表达式
- 如何在服务器端将HTTP POST请求主体作为Java String?
- 有没有关于Spring MVC vs Struts 2和其他框架的使用情况的统计数据?
- 同步跨线程共享但不同时访问的对象