1、yyyy与YYYY

public static void main(String[] args) {
    DateTime date = new DateTime(2019, 12, 31, 0, 0);
 
    SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
    System.out.println(format.format(date.toDate()));
 
    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(format2.format(date.toDate()));
}

输出结果:

2020-12-31
2019-12-31

YYYY是week-based-year,表示当天所在的周属于的年份,一同从周日开始,周六结束,只要本周跨年那么这周就算入下一个年份中。所以2019年12月31日那天在这种转换方式下就是2020年。而当倩yyyy这种情况下年份就是2019。

2、MM与mm

这个比较好区分,MM:表示月份;mm:表示分钟

3、DD与dd

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

输出结果:2019-12-31 转 YYYY/MM/dd 格式: 2020/12/31
                  2019-12-31 转 yyyy/MM/dd 格式: 2019/12/365

DD格式是指当前日期在当年中的天数,今天正好是当年的最后一天,导致字符串多了一位,事实上我这里的本意是当月日期,应该改用dd格式。

4、HH与hh

输出结果:2019-12-31 转 YYYY/MM/dd 格式: 2020/12/31 154958
                  2019-12-31 转 YYYY/MM/dd 格式: 2020/12/31 034958

HH是24小时制,hh是12小时制

5、SS与ss

输出结果:2019-12-31 转 YYYY/MM/dd HHmmss 格式: 2020/12/31 155805
                  2019-12-31 转 YYYY/MM/dd HHmmSS格式: 2020/12/31 1558101

ss表示秒,SS输出的是毫秒

6、

String nowtime = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
System.out.println(nowtime);


yyyyMMddHHmmssSSS


输出结果:20211227155805103

注释:类似这样的格式,4位年2位月2位日2位时2位分2位秒3位毫秒