在运行某些测试时,我遇到了以下问题。使用时:
private String printStandardDate(Date date) {
return DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT).format(date);
}
我发现这会产生不同的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]>
有人可以解释这种行为吗?
答案 0 :(得分:18)
这并不奇怪,这正是它应该起作用的方式。
DateFormat.getDateTimeInstance
的API文档说:
获取日期/时间格式化程序,其中包含默认语言环境的给定日期和时间格式样式。
Windows系统上的默认语言环境与美国的Linux机箱不同。
如果您想要精确控制日期和时间格式,请使用SimpleDateFormat
并自行指定格式。例如:
private String printStandardDate(Date date) {
return new SimpleDateFormat("dd/MM/yy HH:mm").format(date);
}
更好的方法是重用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);
}
答案 1 :(得分:9)
格式基于代码中的默认语言环境。如果要确保结果,必须确保使用特定的区域设置。 getDateTimeInstance
方法被重载以提供alternative method,该{{3}}接收您要用作参数的区域设置。
public static final DateFormat getDateTimeInstance(int dateStyle,
int timeStyle,
Locale aLocale)
如果在两个测试环境中使用相同的区域设置,结果应该相同。