在通常时间下,yyyy-MM-dd和YYYY-MM-dd两种格式化日期的方式得到的日期都是一样的,没有区别。只有在每年的年底最后一周的时候可能会发生意想不到的问题。
原因是YYYY表示的是week-based-year,即使用当天所在的周属于的年份。一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
举个例子:2020-12-27到2020-12-31号这段时间内,使用小写的yyyy得到的年份是正常的2020年,而使用大写的YYYY得到的年份是2021年。
实验测试代码:
public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY-MM-dd");
//当年最后一周前一天(周六)
System.out.println(sdf1.format(getDate("2020-12-26")));
System.out.println(sdf2.format(getDate("2020-12-26")));
System.out.println();
//当年最后一周第一天(周日为第一天)
System.out.println(sdf1.format(getDate("2020-12-27")));
System.out.println(sdf2.format(getDate("2020-12-27")));
System.out.println();
//当年最后一天
System.out.println(sdf1.format(getDate("2020-12-31")));
System.out.println(sdf2.format(getDate("2020-12-31")));
System.out.println();
}
private static Date getDate(String str) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(str);
}
}
结果:
2020-12-26
2020-12-26
2020-12-27
2021-12-27
2020-12-31
2021-12-31