Java 的SimpleDateFormat yyyy和YYYY的区别

发布时间 2023-10-13 14:02:05作者: 先锋之客

区别

在Java中的SimpleDateFormat类中格式化日期时,YYYY和yyyy之期存在细微的差异。它们都代表一年,但是yyyy代表日历年份,而YYYY代表星期,基于周的年份。这是一个细微的差异,通常情况下,两者的结果是相同的,但在跨年的第一周或最后一周可能会有差异。

举例

一个例子比文字更好说明了这一点:

package com.dangoldin.test;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class Test {
 
    public static void main(String[] args) {
        try {
            String[] dates = {"2018-12-01", "2018-12-31", "2019-01-01"};
            for (String date: dates) {
                SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
                Date d = dt.parse(date);
 
                SimpleDateFormat dtYYYY = new SimpleDateFormat("YYYY");
                SimpleDateFormat dtyyyy = new SimpleDateFormat("yyyy");
 
                System.out.println("For date " + date + " the YYYY year is " + dtYYYY.format(d) + " while for yyyy it's " + dtyyyy.format(d));
            }
        } catch (Exception e) {
            System.out.println("Failed with exception: " + e);
        }
    }
}

输出以下内容:

For date 2018-12-01 the YYYY year is 2018 while for yyyy it's 2018
For date 2018-12-31 the YYYY year is 2019 while for yyyy it's 2018
For date 2019-01-01 the YYYY year is 2019 while for yyyy it's 2019

自两年格式匹配以来,第一个和最后一个有意义。中间一个是奇数之一。日期开始于2018-12-31,但是YYYY给您2019,而yyyy给您2018。

结论

1、仅仅是想格式化我们普通人认识的日期,用"yyyy-MM-dd HH:mm:ss" 就够了。YYYY什么的,没事就不要用了啊。
2、日期时间格式统一使用yyyy小写,添加某种形式的lint或检查以确保您的代码没有引用YYYY的任何日期格式。
3、日期格式要规定大家都引用定义好的工具类,避免有人手误打错。