目录
一、利用格式化符号进行格式化
1、格式化符号
转换符 | 说明 | 结果 |
%tH | 小时(00~23) | 15 |
%tI | 小时(01~12) | 03 |
%tk | 小时(00~23) | 15 |
%tI | 小时(1~12) | 3 |
%tM | 分钟(00~59 | 35 |
%tS | 秒(00~59) | 55 |
%tL | 毫秒(000~999) | 923 |
%tN | 9位数微秒(000000000~999999999) | 923000000 |
%tp | 当前语言环境上午/下午 | 下午 |
%tz | 时区 | +08:00 |
%tZ | 时区 | CST |
%ts | 从1970-01-01 00:00:00到现在的秒 | 1526196955 |
%tQ | 从1970-01-01 00:00:00到现在的毫秒 | 1526196955932 |
%tF | 年-月-日 | 2018-03-13 |
%tD | 月/日/年 | 05/13/18 |
%tc | 全部时间日期 | 星期日 五月 13 15:44:21 CST 2018 |
%tr | 时分秒PM | 03:44:21 下午 |
%tT | 时分秒 | 15:44:21 |
%tR | 时分 | 15:44 |
%tA | 星期几 | 星期四 |
%ta | 周几 | 周四 |
%tB | 几月 | 六月 |
%tb | 几月 | 6月 |
以上格式化符号对Date、Calendar、LocalDate、LocalTime、LocalDateTime及时间戳均能进行格式化。但不能对LocalDate类进行含有时分秒的进行格式化,因为在LocalDate中只能精确到年月日对时分秒没有进行处理的能力;同样的不能对LocalTime进行含有年月日的格式化符号进行格式化。
部分演示:
//获取当前时间
LocalDateTime now = LocalDateTime.now();
//格式化输出
System.out.printf("%tF %<tT %<tA %<tB %<tp%n",now);
//格式化为字符串
String str = String.format("%tF %<tT %<tA %<tB %<tp",now);
System.out.println(str);
注:以上代码中“<”代表要格式化的对象和前一个一致,%n为格式化输出中的换行。
运行结果:
二、利用格式化工具进行格式化
1、格式化符号
字母 | 日期或时间元素 | 表示 | 示例 |
G | Era标志符 | Text | AD |
y | 年 | Year | 1996;96 |
M | 年中的月份 | Month | July;Jul;07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
E | 星期中的天数 | Text | Tuesday,Tue |
a | 上下午 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm中的小时数(0-11) | Number | 0 |
h | am/pm中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 豪秒数 | Number | 978 |
z | 时区 | General time zone | Pacific St andard Time;PST;GMT-08Z |
Z | 时区 | RFC 822 time zone | -80:00 |
DateTimeFormatter
.
ofPattern
(),格式化工具只能格式化LocalDate、LocalTime、LocalDateTime和时间戳,对于老的时间类Date、Calendar是无法进行格式化的。
//设定格式化工具要格式化的内容
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EEEE MMMM a");
//LocalDate LocalTime LocalDateTime 时间戳均可
LocalDateTime now = LocalDateTime.now();
//以下两种格式化方式都是可以的
System.out.println(now.format(df));
System.out.println(df.format(now));
运行结果:
三、时间戳转换
//获取当前时间的Date对象
Date date = new Date();
//利用getTime()方法获取时间戳
long l1 = date.getTime();
//获取当前时间的Calendar对象
Calendar cl = Calendar.getInstance();
//获取Date类型的对象
Date dc = cl.getTime();
//将Date类型对象转化为时间戳
long l2 = dc.getTime();
//获取当前时间的LocalDateTime对象
LocalDateTime ldt = LocalDateTime.now();
//将ldt对象转化为时间戳
long l3 = ldt.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();
//分别输出时间戳
System.out.println(l1);
System.out.println(l2);
System.out.println(l3);
运行结果:
值得注意的是Calendar类不能直接转换为时间戳,只能先转换为Date类型再利用Date类的方法进行转换。而LocalDateTime转换为时间戳的方式更为麻烦,因为LocalDateTime类中的方法已经足够我们使用了没必要转换为时间戳再去使用。