SimpleDateFormat 传入的参数大小写字母是有讲究的,踩过的坑是:解析年份出错
看下图 Y 表示的是weak year,他是什么含义呢?jdk下面有案例,但是没有给到特殊情况,我也是看其他博客的描述,然后自己实验了一下,发现他的含义是这样的
如果这一天所在的一周,跨年了,那这一天算是下一年的,月份和日不会变,只有年份会增多一年,所以会有那几天会解析错年份,注意:每周从周日开始
这是jdk.18 开发手册里面 SimpleDateFormat 这个类传入参数的年月日具体含义
代码测试
package test3;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class SimpleDateFormatTest {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2021,Calendar.DECEMBER,26);
Date time = calendar.getTime();
SimpleDateFormat date1 = new SimpleDateFormat("YYYY-MM-dd");
System.out.println("YYYY:"+date1.format(time));
SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("yyyy:"+date2.format(time));
}
}
正常:
1)当日期为2021-12-25及这一年之前的时间,是不会解析错年份的,因为这一天所在的周,没有跨年
运行结果1:
YYYY:2021-12-25
yyyy:2021-12-25
异常:
2)当日期为2021-12-26到31号时,这一周是跨年的,解析这几天是属于下一年的
运行结果2:
YYYY:2022-12-26
yyyy:2021-12-26