当运行一些测试中,我遇到了以下问题。 当使用:
private String printStandardDate(Date date) {
return DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT).format(date);
}
我发现这个生产日期的不同格式取决于位置,其中从运行测试。 因此,在Windows /月食本地我得到了一个结果:04/02/12 18:18,但在美国的Linux中,我得到12年2月4日下午6点18分
这使我的测试/构建失败:
预期:<[04/02/12 18:18]>但:<[12年2月4日下午6时18分]>
任何人都可以解释这种现象?
这不奇怪,这就是它究竟应该如何工作。
API文档DateFormat.getDateTimeInstance
说:
获取与给定的日期和时间格式样式为默认语言环境的日期/时间格式。
默认的语言环境是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);
}
该格式是基于在你的代码中的默认语言环境。 如果你想确保的结果,你必须确保使用特定的语言环境。 该getDateTimeInstance
方法重载提供一个替代方法接收要作为参数使用的语言环境。
public static final DateFormat getDateTimeInstance(int dateStyle,
int timeStyle,
Locale aLocale)
如果在这两个测试环境中使用相同的语言环境,其结果应该是一样的。