这是我参与 8 月更文挑战的第 6 天,活动详情查看: 8月更文挑战
背景
最近两天都在写日期和时间相关的控件, 感觉日期格式化有好多种, 遂决定写一篇文章统一梳理一波
SimpleDateFormat
使用SimpleDateFormat
格式化时间时就不得不先说下格式化时间是对应的字符
常用字符如下
yyyy:年
y" , "yyy" , "yyyy" 匹配的都是4位完整的年 如 : "2021"
"yy" 匹配的是年分的后两位 如 : "21"
超过4位,会在年份前面加"0"补位 如 "YYYYY"对应"02021"
MM(只能用大写):月
假设月份为8月 "M" 对应 "8" "MM" 对应 "08" "MMM" 对应 "Aug" "MMMM" 对应 "Aug" 超出3位,仍然对应 "August"
dd:日
"d" , "dd" 都对应 "21" 超出2位,会在数字前面加"0"补位. 例如 "dddd" 对应 "0021"
hh(小写为12小时制):1~12小时制(1-12)
HH(大写为24小时制):24小时制(0-23)
mm(只能用小写):分
ss(只能用小写):秒
S(只能用大写):毫秒
a : 代表上午or下午,上午对应英文 "AM" , 下午对应英文 "PM"
常用组合
- 紧凑型
yyMMdd 对应格式为:210806
yyyyMMdd 对应格式为:20210806
yyyyMMdd hh:mm a 对应格式为:20210806 04:35 AM - 带有格式的
一般年月日的格式用"-"或者""隔开
yy-MM-dd 对应格式为:21-08-06
yyyy-MM-dd 对应格式为:2021-08-06
yyyy-MM-dd 对应格式为:2021-08-06
yyyy-MM-dd HH:mm 对应格式为:2021-08-06 16:35
yyyy-MM-dd hh:mm a 对应格式为:2021-08-06 04:35 AM
yyyy-MM-dd HH:mm:ss 对应格式为:2021-08-06 16:35:33
yyyy-MM-dd hh:mm:ss a 对应格式为:2021-08-06 04:35:33 AM - 自定义格式
格式除了字符格式化外还可以用汉字格式化
yyyy年MM月dd日 对应格式为:2021年08月06日
yyyy年MM月dd日 HH时mm分 对应格式为:021年08月06日 16时35分
代码
SimpleDateFormat
构造方法如果只传格式化,则会默认根据当前时区进行格式化,如果要指定时区可以用SimpleDateFormat(String pattern, Locale locale)
方法
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat format;
format = new SimpleDateFormat("yyyyMMdd");
System.out.print("yyyyMMdd ");
System.out.println(format.format(date));
format = new SimpleDateFormat("yyyyMMdd hh:mm a");
System.out.print("yyyyMMdd hh:mm a ");
System.out.println(format.format(date));
format = new SimpleDateFormat("yyyy-MM-dd");
System.out.print("yyyy-MM-dd ");
System.out.println(format.format(date));
format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
System.out.print("yyyy-MM-dd HH:mm ");
System.out.println(format.format(date));
format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
System.out.print("yyyy-MM-dd hh:mm:ss a ");
System.out.println(format.format(date));
format = new SimpleDateFormat("yyyy年MM月dd日");
System.out.print("yyyy年MM月dd日 ");
System.out.println(format.format(date));
format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
System.out.print("yyyy年MM月dd日 HH时mm分 ");
System.out.println(format.format(date));