本文共 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/