文章目录
YYYY-MM-dd 与 yyyy-MM-dd
Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.DECEMBER, 31);
Date testDate = calendar.getTime();
SimpleDateFormat dtf = new SimpleDateFormat("YYYY-MM-dd");
System.out.println("2019-12-31 转 YYYY-MM-dd 格式后 " + dtf.format(testDate));
输出结果:
2019-12-31 转 YYYY-MM-dd 格式后 2020-12-31
解析
为什么不是 2019-12-31 而是 2020-12-31?这是因为 ‘YYYY’ 是按照基于周来计算的年的,它指向当天所在周属于的年份,一周从周日开始算起,周六结束,只要本周跨年,那这一周就算下一年的了。正确姿势是使用 ‘yyyy’ 格式。
来看看正确姿势
Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.DECEMBER, 31);
Date testDate = calendar.getTime();
SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("2019-12-31 转 yyyy-MM-dd 格式后 " + dtf.format(testDate));
输出结果:
2019-12-31 转 yyyy-MM-dd 格式后 2019-12-31
yyyy-MM-dd 中的MM为什么是大写?
yyyy-mm-dd 是标识 “年-月-日”,那 yyyy-MM-dd 是为了区分 HH:mm:ss 中的mm(分)
那 HH:mm:ss 中的 HH 为什么大写? 是为了区分 12小时制与24小时制
h 代表 12小时制,H 代表24小时制。
yyyy-M-d H : m : s
有时候会看到这样的格式,它们的区别是是否有前导零,H,m,s表示非零开始,HH,mm,ss表示从零开始。比如:凌晨1点2分,HH:mm:ss 表示 01:02,H:m 表示 1:2
yyyyy/yyy/yy/y
yyyyy/yyy/yy/y 显示为:2020/2020/20/0 ,yyy 与 yyyy 表示的是一样的,只是为了便于理解一般都写成 yyyy,yy 表示 年份后两位,y 表示年份最后一位。
MMMM/MMM/MM/M
MMMM/MMM/MM/M 显示为:一月/一月/01/1 ,其中 MMMM 显示全程,MMM 显示缩写,但中文都是一样的,英文是 January/Jan
dddd/ddd/dd/d
dddd/ddd/dd/d 显示为:星期三/周三(有的语言显示“三”)/01/1,其中 dddd 显示全程,ddd 是简称,dd/d 表示的是几号。
HH/H/hh/h
HH/H/hh/h 显示为:01/1/01 AM/1 AM