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
我想 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