Java 的SimpleDateFormat yyyy和YYYY的区别
区别
在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得到的为2018,但是YYYY得到的为2019,不符合预期。
结论
1、仅仅是想格式化我们普通人认识的日期,用"yyyy-MM-dd HH:mm:ss" 就够了。YYYY什么的,没事就不要用了啊。
2、日期时间格式统一使用yyyy小写,添加某种形式的lint或检查以确保您的代码没有引用YYYY的任何日期格式。
3、日期格式要规定大家都引用定义好的工具类,避免有人手误打错。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号