首页 > 解决方案 > 如何仅用分钟格式化 LocalDateTime(截断秒)?

问题描述

我有LocalDateTime价值观,想利用ISO_LOCAL_DATE_TIME常数打印到分钟

两个测试用例都失败了:

Expected :2020-10-10T15:16
Actual   :2020-10-10T15:16:00

但为什么?

assertEquals("2020-10-10T15:16", LocalDateTime.parse("2020-10-10T15:16:17")
                .truncatedTo(ChronoUnit.MINUTES)
                .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));

assertEquals("2020-10-10T15:16", DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(
        LocalDateTime.parse("2020-10-10T15:16:17").truncatedTo(ChronoUnit.MINUTES)));

除此之外:使用第一种或第二种方法格式化值之间的区别在哪里LocalDateTime

标签: javajava-timelocaldatelocaldatetime

解决方案


使用自定义格式化程序,当日期时间被截断为分钟时,ISO_LOCAL_DATE_TIME将始终使用00秒,因为该日期格式指定应包含秒(并且 0 是日期时间中秒字段的值)。

这应该工作

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
assertEquals("2020-10-10T15:16", LocalDateTime.parse("2020-10-10T15:16:17")
         //.truncatedTo(ChronoUnit.MINUTES) <-- not needed with that format
           .format(formatter));

推荐阅读