一、问题描述
项目中每天执行的一个定时任务在 2019 年 12 月 29 日 - 2019 年 12 月 31 日这三天没有执行。
经排查,发现是在使用 SimpleDateFormat 格式化日期的时候,用了 “YYYY-MM-dd” 这个模式来格式化日期的,而没有用标准的 “yyyy-MM-dd”。
查阅了一些资料发现 “YYYY” 这种大 Y 年份模式会在某一天所在的周(本周日 - 下周六)横跨两年的时候,将年份格式为下一年,例如:2019 年 12 月 29 日所在的那个周横跨了 2019 年和 2020 年,从而导致 2019 年 12 月 29 日被 “YYYY-MM-dd” 格式化成了 2020 年 12 月 29 日。
二、测试代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
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");
Calendar calendar1 = Calendar.getInstance();
// month从0开始,0表示1月,11表示12月
calendar1.set