我得到了非常奇怪的结果,我无法理解。
public class Test {
private static DateFormat df = new SimpleDateFormat("dd.MM.YYYY HH:mm");
public static void main(String[] args) {
Date d = new Date(1356912000000L);
System.out.println(d);
System.out.println(df.format(d));
}
}
给出输出:
Mon Dec 31 01:00:00 CET 2012
31.12.2013 01:00
我认为这可能是区域设置的一些问题,但这是一整年的转变!任何人都可以解释为什么这样做?
答案 0 :(得分:4)
YYYY
是周年,而不是日历年。您想要yyyy
。这是Java的相关细节:
为WEEK_OF_YEAR字段计算的值范围为1到53 一个日历年的第一周是最早的七天 从至少包含的getFirstDayOfWeek()开始 从那年开始的getMinimalDaysInFirstWeek()天。因此,它取决于 getMinimalDaysInFirstWeek(),getFirstDayOfWeek()的值,以及 1月1日的一周。一年的第1周和第1周之间的一周 次年的第1周(不包括)按顺序编号 从2到52或53(除了参与的年份除外) 朱利安 - 格里高利过渡)。
getFirstDayOfWeek()和getMinimalDaysInFirstWeek()值是 在构造时使用与语言环境相关的资源初始化 阳历日历。周测定与ISO兼容 当getFirstDayOfWeek()是MONDAY时,8601标准 getMinimalDaysInFirstWeek()是4,这些值在语言环境中使用 标准是首选的地方。这些值可以明确地设置 调用setFirstDayOfWeek()和setMinimalDaysInFirstWeek()。
周年与WEEK_OF_YEAR周期同步。几周之间 第一周和最后一周(包括)具有相同的周年值。 因此,一周的第一天和最后一天可能会有所不同 历年值。
例如,1998年1月1日是星期四。如果getFirstDayOfWeek()是 星期一和getMinimalDaysInFirstWeek()是4(ISO 8601标准 兼容设定),1998年第1周开始于1997年12月29日, 并于1998年1月4日结束。最后三年的一周是1998年 1997年的日历年。但是,如果是getFirstDayOfWeek() 1998年1月4日星期日,1998年1月1日开始,结束 1998年1月10日; 1998年的前三天是一周的一部分 1997年第53号,其一周是1997年。
答案 1 :(得分:1)
而不是:
"dd.MM.YYYY HH:mm"
使用:
"dd.MM.yyyy HH:mm"