我想返回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
。我花了几天时间才发现这种差异,有人可以解释一下吗?
答案 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