使用DateFormat.getDateTimeInstance()格式(日期)。(Using Da

2019-09-19 01:10发布

当运行一些测试中,我遇到了以下问题。 当使用:

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分]>

任何人都可以解释这种现象?

Answer 1:

这不奇怪,这就是它究竟应该如何工作。

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);
}


Answer 2:

该格式是基于在你的代码中的默认语言环境。 如果你想确保的结果,你必须确保使用特定的语言环境。 该getDateTimeInstance方法重载提供一个替代方法接收要作为参数使用的语言环境。

public static final DateFormat getDateTimeInstance(int dateStyle,
                             int timeStyle,
                             Locale aLocale)

如果在这两个测试环境中使用相同的语言环境,其结果应该是一样的。



文章来源: Using DateFormat.getDateTimeInstance().format(date);