Java 如何仅用分钟格式化LocalDateTime(截断秒)?

Java 如何仅用分钟格式化LocalDateTime(截断秒)?,java,java-time,localdate,localdatetime,Java,Java Time,Localdate,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") .truncated

我有
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
值的区别在哪里?

使用自定义格式化程序,
ISO\u LOCAL\u DATE\u 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));
DateTimeFormatter formatter=DateTimeFormatter.of模式(“yyyy-MM-dd'T'HH:MM”);
assertEquals(“2020-10-10T15:16”,LocalDateTime.parse(“2020-10-10T15:16:17”)
//.truncatedTo(ChronoUnit.MINUTES)您的用例不需要格式化程序
默认情况下,如果字段为零,则忽略“秒数”和“纳米秒数”字段

所使用的格式将是输出的完整值的最短格式 省略部分暗示为零的时间

将“秒”和“秒”字段的秒数设置为零

截断返回带有字段的原始日期时间的副本 小于设置为零的指定单位。例如,截断 分钟单位将设置分钟的秒数和纳米秒数 字段设置为零

因此,您的用例不需要格式化程序

演示:

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        System.out.println(LocalDateTime.parse("2020-10-10T15:16:17").truncatedTo(ChronoUnit.MINUTES));
    }
}
输出:

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        System.out.println(LocalDateTime.parse("2020-10-10T15:16:17").truncatedTo(ChronoUnit.MINUTES));
    }
}
2020-10-10T15:16

documentation is your friend这并不能回答我的问题,尽管我正在截断秒数,但为什么秒数仍然被打印出来。