2022-01-27 15:02:16 版本 : YYYY-MM-dd与yyyy-MM-dd
作者: 陈一奇 于 2022年01月27日 发布在分类 / 人防组 / 人防后端 下,并于 2022年01月27日 编辑
 历史版本

修改日期 修改人 备注
2022-01-27 15:04:36[当前版本] 陈一奇 修改标题
2022-01-27 15:03:56 陈一奇 修改标题
2022-01-27 15:02:16 陈一奇 格式调整
2022-01-27 14:58:42 陈一奇 创建版本

yyyy-MM-dd与 YYYY-MM-dd 看似长得很像,但使用结果大不相同,稍不注意很容易踩坑。

测试逻辑:

1、创建两个日期格式化:

  • 一个是存在问题的YYYY-MM-dd
  • 另一个是正确用法yyyy-MM-dd

2、分别去格式化两个不同的日期:2021年12月25日(周六),2020年12月26日(周日) 具体代码如下:

public class Tests { @Test public void test() throws Exception {
        SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd");
        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");

        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, 2021);
        c.set(Calendar.MONTH, 11); // 2021年12月25日周六 c.set(Calendar.DATE, 25);
        System.out.println("YYYY-MM-dd = " + df1.format(c.getTime()));
        System.out.println("yyyy-MM-dd = " + df2.format(c.getTime())); // 分割线 System.out.println("========================"); // 2021年12月26日 周日 c.set(Calendar.DATE, 26);
        System.out.println("YYYY-MM-dd = " + df1.format(c.getTime()));
        System.out.println("yyyy-MM-dd = " + df2.format(c.getTime()));
    }

} 

跑一下测试,可以看到输出结果如下:

YYYY-MM-dd = 2021-12-25
yyyy-MM-dd = 2021-12-25
========================
YYYY-MM-dd = 2022-12-26
yyyy-MM-dd = 2021-12-26 

2021年12月25日(周六),两种格式化都正确 2021年12月26日(周日),YYYY-MM-dd出了问题,年份到了2022年

问题原因

为什么YYYY-MM-dd格式化2021年12月26日的时候,会到2022年呢?

因为YYYY是week-based-year,表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。

所以2021年12月26日那天在这种表述方式下就已经到 2022年了。

而当使用yyyy的时候,就还是 2021 年。


历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp