1 public static void main(String[] args) { 2 Calendar calendar = Calendar.getInstance(); 3 // 2019-12-31 4 calendar.set(2019, Calendar.DECEMBER, 31); 5 Date strDate1 = calendar.getTime(); 6 // 2020-01-01 7 calendar.set(2020, Calendar.JANUARY, 1); 8 Date strDate2 = calendar.getTime(); 9 SimpleDateFormat formatYYYY = new SimpleDateFormat("YYYY/MM/dd"); 10 System.out.println("2019-12-31 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate1)); 11 System.out.println("2020-01-01 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate2)); 12 }

年份由YYYY-->yyyy
jDK6的SimpleDateFormat只有小“y”,没有大“Y”。JDK7开始引入了大“Y”,表示Week year。
Week year意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。例如2017年12月31日,本周(2017年12月31日-2018年1月6日)本周跨年了。就进入了下一年。
1 SimpleDateFormat formatYYYY = new SimpleDateFormat("yyyy/MM/dd"); 2 System.out.println("2019-12-31 转 yyyy/MM/dd 格式: " + formatYYYY.format(strDate1)); 3 System.out.println("2020-01-01 转 yyyy/MM/dd 格式: " + formatYYYY.format(strDate2));

日期 dd-->DD
1 SimpleDateFormat formatYYYY = new SimpleDateFormat("yyyy/MM/DD"); 2 System.out.println("2019-12-31 转 yyyy/MM/DD 格式: " + formatYYYY.format(strDate1)); 3 System.out.println("2020-01-01 转 yyyy/MM/DD 格式: " + formatYYYY.format(strDate2));

常用日期结构:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy
| 字母 | 日期或时间元素 | 表示 | 实例 |
| G | 年代标志符 | Text | AD |
| y | 年 | Year | 1996:96 |
| Y | 年 | Year | 2009;09 |
| M | 月 | Month | July;Jul;07 |
| L | 年月(独立形式) | Month | July;Jul;07 |
| w | 一年中第几个星期 | Number | 27 |
| W | 一月中第几个星期 | Number | 2 |
| D | 一年中的第几天 | Number | 189 |
| d | 一月中的第几天 | Number | 10 |
| F | 一月中第几个星期 | Number | 03 |
| E | 星期数(星期一.......星期日) | Text | 星期日 |
| u | 星期数(1 =星期一,7,星期日) | Number | 7 |
| a | 上午 / 下午 标记符 | Text | PM |
| H | 时 一天中的小时数(0-23) | Number | 0 |
| k | 时 一天中的小时数(1~24) | Number | 24 |
| K | am/pm 中的小时数(0-11) | Number | 0 |
| h | am/pm 中的小时数(1-12) | Number | 12 |
| m | 小时中的分钟数 | Number | 30 |
| s | 分钟的秒数(当前分钟的秒数) | Number | 55 |
| S | 毫秒数(当前秒的毫秒数) | Number | 978 |
| z | 时区 | CST | |
| Z | 时区 | =0800 | |
| X | 时区 | +08 |