【问题标题】:Java SimpleDateFormat shifts Date by one year [duplicate]Java SimpleDateFormat 将日期移动一年 [重复]
【发布时间】:2015-12-27 03:07:38
【问题描述】:

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

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

我认为这可能是语言环境的一些问题,但这是一整年的转变!谁能解释一下为什么会这样?

【问题讨论】:

    标签: java date simpledateformat type-conversion


    【解决方案1】:

    代替:

    "dd.MM.YYYY HH:mm"

    用途:

    "dd.MM.yyyy HH:mm"

    【讨论】:

      【解决方案2】:

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

      Week Of Year and Week Year

      为 WEEK_OF_YEAR 字段计算的值范围为 1 到 53。 日历年的第一周是最早的 7 天期间 从 getFirstDayOfWeek() 开始,至少包含 getMinimalDaysInFirstWeek() 从那年开始的天数。因此它取决于 getMinimalDaysInFirstWeek()、getFirstDayOfWeek() 和 1 月 1 日的星期几。一年的第 1 周和 次年的第 1 周(不含)按顺序编号 从 2 到 52 或 53(除了参与的年份) 儒略-格里高利过渡)。

      getFirstDayOfWeek() 和 getMinimalDaysInFirstWeek() 值是 构造时使用依赖于语言环境的资源进行初始化 阳历日历。星期确定与 ISO 兼容 8601 标准当 getFirstDayOfWeek() 是 MONDAY 并且 getMinimalDaysInFirstWeek() 为 4,这些值在语言环境中使用 首选标准的地方。这些值可以通过以下方式显式设置 调用 setFirstDayOfWeek() 和 setMinimalDaysInFirstWeek()。

      一周年与 WEEK_OF_YEAR 周期同步。之间的所有星期 第一周和最后一周(含)具有相同的周年值。 因此,一周年的第一天和最后一天可能有不同的 日历年值。

      例如,1998 年 1 月 1 日是星期四。如果 getFirstDayOfWeek() 是 MONDAY 和 getMinimalDaysInFirstWeek() 为 4(ISO 8601 标准 兼容设置),然后 1998 年的第 1 周从 1997 年 12 月 29 日开始, 并于 1998 年 1 月 4 日结束。最后三个星期是 1998 年 1997 日历年的天数。但是,如果 getFirstDayOfWeek() 是 星期日,然后 1998 年的第 1 周开始于 1998 年 1 月 4 日,结束于 1998 年 1 月 10 日; 1998 年的前三天是一周的一部分 1997 年的 53 个,他们的周年是 1997 年。

      【讨论】:

        猜你喜欢
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 2019-05-27
        • 1970-01-01
        相关资源
        最近更新 更多