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代表的是处于这一年中那一天,不是处于这个月的那一天。