Java SimpleDateFormat将Date更改为一年

时间:2015-09-29 14:56:36

标签: java date simpledateformat type-conversion

我得到了非常奇怪的结果,我无法理解。

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

我认为这可能是区域设置的一些问题,但这是一整年的转变!任何人都可以解释为什么这样做?

2 个答案:

答案 0 :(得分:4)

YYYY是周年,而不是日历年。您想要yyyy。这是Java的相关细节:

Week Of Year and Week Year

  

为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"