前言
LocalDateTime、LocalDate、Date、ZonedDateTime的定义和使用场景这里不进行介绍了,网上一搜很多。本文主要介绍一下一些可能会用到的时间格式。
DateTimeFormatter
1. 与SimpleDateFormat
DateTimeFormatter 线程安全,可以创建一个公共变量,并发使用。
除了常用的一些ISO标准形式,如ISO_DATE_TIME、ISO_DATE,还有一个RFC_1123_DATE_TIME格式,解析诸如"Tue, 3 Jun 2008 11:05:30 GMT" 格式的时间。
一般情况下,采用自定义格式的方法创建
DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss")
2. 一些常见的时间格式
- Wed Aug 31 14:49:02 2022 —— eee MMM d HH:mm:ss yyyy
- Wed Aug 03 14:49:02 2022 —— eee MMM d HH:mm:ss yyyy
- Wed Aug (空格)3 14:49:02 2022 —— eee MMM ppd HH:mm:ss yyyy
注意这种格式的,需要使用 Locale.US,推测为日期格式,debug时Locale.CHINA 对应的星期匹配为中文的 ‘星期一’,无法和上述的日期匹配。
需要注意的第二个地方:第三个时间的日期 3,前置了一个空格,一般日志输出里会有这种要求,在不补0的情况下,长度保持一致,如下图:
对于空格,需要使用 p来表示,p的数量代表了格式化后的位数,不够则补空格,如 ppd,代表日期固定为两位,像1号则前补了空格。
(建议使用 d 来代替 ppd, 这样 1号会表示为 01,好处是日志的空格数一致,在做awk的时候要方便)