本文共 1980 字,大约阅读时间需要 6 分钟。
Date
对象时,常用 SimpleDateFormat
进行格式化显示。而使用新的 LocalDateTime
或 ZonedLocalDateTime
时,格式化显示需要使用 DateTimeFormatter
。与 SimpleDateFormat
不同的是, DateTimeFormatter
不仅不是单一对象,还具备线程安全特性。这意味着在使用 DateTimeFormatter
时,只需创建一个实例即可全局使用,而无需在方法内部频繁创建新对象。尽管如此,关于线程安全的知识点我们会在后续内容中详细探讨。 G
:公元表示。 u
、 y
、 Y
:年份表示。 y
与 Y
的区别在于 Y
用于不带年份的表示方式,而 y
则表示当前年份。 M
:当前月份的数字表示。 L
:表示当前年份的第几月份。 E
:星期几表示(例如:星期日)。 F
:表示当前月份已经过了多少个完整的星期。 W
:表示当前年份已经过了多少个完整的星期。 w
:表示当前年份从某一年开始已经过了多少个完整的星期。 D
:表示已过的天数。 d
:表示当前的日期。 a
:上午或下午的表示。 h
:12小时制的小时数,默认逢0变为12。 K
:12小时制的小时数,逢12变为0,范围是0-11。 H
:24小时制的小时数,范围是0-23。 k
:24小时制的小时数,逢0变为24,范围是1-24。 m
:表示当前小时已经过了多少分钟。 s
:表示当前分钟已经过了多少秒。 A
:表示当前秒已经过了多少毫秒。 n
:表示当前秒已经过了多少纳秒。 N
:表示当前日期已经过了多少纳秒(每天过失去24小时,所以一天等于 N=24*60*60*1e9=86,400,000,000
纳秒)。 LocalDateTime
提供了对日期时间进行操作的便捷方法,可以直接获取当前时间或指定时间的 LocalDateTime
实例。以下是一些常用的示例代码: LocalDateTime now = LocalDateTime.now(); // 获取当前执行时刻 System.out.println("当前时间:" + now); // 时间格式化示例 System.out.println("用格式化标记输出:"); // 年份示例 System.out.println(now.format(DateTimeFormatter.ofPattern("Y"))); // 年份表示(不带年前缀) System.out.println(now.format(DateTimeFormatter.ofPattern("y"))); // 月份示例 System.out.println(now.format(DateTimeFormatter.ofPattern("M"))); // 星期示例 System.out.println(now.format(DateTimeFormatter.ofPattern("E"))); System.out.println(now.format(DateTimeFormatter.ofPattern("a"))); // 12小时制示例 System.out.println(now.format(DateTimeFormatter.ofPattern("h"))); // 24小时制示例 System.out.println(now.format(DateTimeFormatter.ofPattern("H"))); // 分钟和秒示例 System.out.println(now.format(DateTimeFormatter.ofPattern("m"))); System.out.println("指定时间的例子:"); LocalDateTime now1 = LocalDateTime.of(2020, 1, 1, 23, 59, 59); now1 = now1.plusSeconds(2); System.out.println("2020-01-01 23:59:59 加2秒后变为" + now1);
通过这些代码示例,可以看出DateTimeFormatter
对日期时间格式化的强大灵活性。与传统的SimpleDateFormat
相比,它不仅更安全,而且支持更高级的格式化需求,如时间区支持和线程安全等。 如果需要改造旧项目中的日期时间显示逻辑,可以考虑将所有SimpleDateFormat
实例替换为DateTimeFormatter
,以提升代码的线程安全性和整体可维护性。
转载地址:http://iivkk.baihongyu.com/