Mic*_*l W 11 java environment timezone junit
在运行一些测试时,我遇到了以下问题.使用时:
private String printStandardDate(Date date) {
return DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT).format(date);
}
Run Code Online (Sandbox Code Playgroud)
我发现这会产生不同的Date格式,具体取决于运行测试的位置.所以在windows/eclipse本地我得到了一个结果:04/02/12 18:18但是在美国的Linux机器上我得到了2/4/12 6:18 PM
这会导致我的测试/构建失败:
预期:<[04/02/12 18:18]>但是:<[2/4/12 6:18 PM]>
有谁能解释这种行为?
Jes*_*per 18
这并不奇怪,这正是它应该如何工作的.
API文档DateFormat.getDateTimeInstance说:
获取具有默认语言环境的给定日期和时间格式样式的日期/时间格式化程序.
Windows系统上的默认语言环境与美国的Linux机箱不同.
如果您想要精确控制日期和时间格式,请自行使用SimpleDateFormat并指定格式.例如:
private String printStandardDate(Date date) {
return new SimpleDateFormat("dd/MM/yy HH:mm").format(date);
}
Run Code Online (Sandbox Code Playgroud)
更好的方法是重用SimpleDateFormat对象,但要注意它不是线程安全的(如果同时从多个线程调用该方法,如果这些线程使用相同的SimpleDateFormat对象,事情就会搞砸).
private static final DateFormat DATE_FORMAT =
new SimpleDateFormat("dd/MM/yy HH:mm");
private String printStandardDate(Date date) {
return DATE_FORMAT.format(date);
}
Run Code Online (Sandbox Code Playgroud)
格式基于代码中的默认语言环境.如果要确保结果,必须确保使用特定的区域设置.getDateTimeInstance重载该方法以提供另一种方法,该方法接收您要用作参数的语言环境.
public static final DateFormat getDateTimeInstance(int dateStyle,
int timeStyle,
Locale aLocale)
Run Code Online (Sandbox Code Playgroud)
如果在两个测试环境中使用相同的区域设置,结果应该相同.
| 归档时间: |
|
| 查看次数: |
34299 次 |
| 最近记录: |