Java日期转换:返回不同的一周

时间:2016-08-09 06:07:52

标签: java date date-format simpledateformat

我想返回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);
}

我想为任何输入日期返回<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

为什么要返回计算机A 2015/53而另一个2015/01。我花了几天时间才发现这种差异,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

原因很简单......你忽略了语言环境但是 每周的定义是100%依赖于语言环境。

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

原因是: 美国的第一周与德国的第一周不一样。

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

实施例

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

     

在美国: 2015/01

     

柏林的异常: 2015/53