Android SimpleDateFormat格式化日期

5,210 阅读3分钟

这是我参与 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));

image.png