Java 日期转换:返回一年中不同的星期

Java Date Converting: Different week of year returned

我想 return 像 2016/06 这样的日期的星期和年份。因此我使用下面的代码来尝试一下:

public static void main(String[] args) throws ParseException {

    DateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
    DateFormat formatWeekAndYear = new SimpleDateFormat("yyyy/ww");

    String articleDate = "31.12.2015 11:26:00";

    long keyDate = format.parse(articleDate).getTime();
    System.out.println("KeyDate: " + keyDate + " = " + format.format(keyDate));

    String formatted = formatWeekAndYear.format(keyDate);
    System.out.println(formatted);
}

我想 return 一个 <Year> / <Week Of Year> 字符串作为任何输入日期,例如31.12.2015 11:26:00(见代码)。

现在奇怪的行为:

我得到不同的结果,这取决于我 运行 Java 程序的计算机!

这里是我本地 PC 上的输出:

KeyDate: 1451557560000 = 31.12.2015 11:26:00
2015/53

运行 我得到的远程机器上的程序完全相同:

KeyDate: 1451557560000 = 31.12.2015 11:26:00
2015/01

为什么 return 的计算机 A 2015/53 而另一台 2015/01。我花了好几天才找出这个区别,有人可以解释一下吗?

原因很简单...您忽略了语言环境但是 一年中第几周的定义 100% 取决于区域设置。

在这种情况下,您应该考虑使用 locale 创建 SimpleDateFormat 的实例 ...

原因是: 美国的第一周和德国的第一周不一样..

考虑下面的一段代码,它解释了相同代码在不同语言环境下的不同结果...

示例:

public static void main(String[] args) {

DateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
DateFormat formatWeekAndYear = new SimpleDateFormat("yyyy/ww");
DateFormat formatWeekAndYearGERMANY = new SimpleDateFormat("yyyy/ww", Locale.GERMAN);

String articleDate = "31.12.2015 11:26:00";

long keyDate = 1451557560000L;
System.out.println("KeyDate: " + keyDate + " = " + format.format(keyDate));

System.out.println("in USA:" + formatWeekAndYear.format(keyDate));
System.out.println("aber in Berlin:" + formatWeekAndYearGERMANY.format(keyDate));
}

输出如下:

KeyDate: 1451557560000 = 31.12.2015 11:26:00

in USA: 2015/01

aber in Berlin: 2015/53