跨年的BUG:YYYY和yyyy不一样,DD和dd也不一样

public class test {
    public static void main(String[] args) {

        Calendar cal = Calendar.getInstance();
        //2019-12-31
        cal.set(2019, Calendar.DECEMBER, 31);
        Date strDate = cal.getTime();
        //2020-01-01
        cal.set(2020, Calendar.JANUARY, 1);
        Date strDate1 = cal.getTime();
        //大写YYYY
        SimpleDateFormat sDf = new SimpleDateFormat("YYYY/MM/dd");
        System.out.println("2019-12-31 转 YYYY/MM/dd 格式:" + sDf.format(strDate));
        System.out.println("2020-01-01 转 YYYY/MM/dd 格式:" + sDf.format(strDate1));
        //小写YYYY
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        System.out.println("2019-12-31 转 yyyy/MM/dd 格式:" + sdf.format(strDate));
        System.out.println("2020-01-01 转 yyyy/MM/dd 格式:" + sdf.format(strDate1));

        doIt(2020,01,20,"MM/DD/YYYY");
        doIt(2020,01,21,"DD/MM/YYYY");
        doIt(2020,01,22,"YYYY-MM-DD");
        doIt(2020,03,17,"MM/DD/YYYY");
        doIt(2020,03,18,"DD/MM/YYYY");
        doIt(2020,03,19,"YYYY-MM-DD");
    }
    private static void doIt(int Y, int M, int D, String pat) {
        LocalDate dat = LocalDate.of(Y, M, D);
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pat);
        String str = dtf.format(dat);
        System.out.println(Y + "-" + M + "-" + D + "-" + pat + "-" + str);
    }
}

结果如下:

2019-12-31 转 YYYY/MM/dd 格式:2020/12/31
2020-01-01 转 YYYY/MM/dd 格式:2020/01/01
2019-12-31 转 yyyy/MM/dd 格式:2019/12/31
2020-01-01 转 yyyy/MM/dd 格式:2020/01/01

2020-1-20-MM/DD/YYYY-01/20/2020
2020-1-21-DD/MM/YYYY-21/01/2020
2020-1-22-YYYY-MM-DD-2020-01-22
2020-3-17-MM/DD/YYYY-03/77/2020
2020-3-18-DD/MM/YYYY-78/03/2020
2020-3-19-YYYY-MM-DD-2020-03-79

说明:YYYY,week-based year 是 ISO 8601 规定的
Java's DateTimeFormatter pattern "YYYY" gives you the week-based-year, (by default, ISO-8601 standard) the year of the Thursday of that week.

1️⃣12/29/2019 将会格式化到2019年 这一周还属于2019年
12/30/2019 将会格式化到2020年 这一周已经属于2020年

2019-12-31号这一天,按周算年份已经属于2020年了,格式化之后就变成2020年,后面的月份日期不变。

2️⃣最后的3个日期都错误了,这里的大写的DD代表的是处于这一年中那一天,不是处于这个月的那一天。

你可能感兴趣的:(跨年的BUG:YYYY和yyyy不一样,DD和dd也不一样)