有没有办法像这样的DateTimeFormatter

DateTimeFormatter.ofPattern("HH:mm")


并且应该将其转换为LocalDateTime并将丢失的内容归零?

实际上,在Joda上有DateTimeFormat,它返回了DateTime而不是异常。有什么等效的吗?

val formatter = org.joda.time.format.DateTimeFormat.forPattern(pattern)
formatter.parseDateTime(data).toDate


无论java8上的模式是什么,它都会始终生成真实日期,因为它表示缺少LocalDate。

实际上,模式应该是可变的,以便人们可以插入HH:mm和dd.MM.yyyy并始终获取LocalDateTime,应将其初始化/默认为1970-01-01T00:00。

这样做:

// with pattern HH:mm
formatter.parse("00:00") should yield LocalDateTime.of(1970, 01, 01, 0, 0)

// with pattern YYYY-mm
formatter.parse("2016-11") should yield LocalDateTime.of(2016, 11, 01, 0, 0)

最佳答案

没有内置的默认值。您必须提供缺少的值。

// Parse HH:mm
LocalDateTime ldt1 = LocalTime.parse("12:34")
                              .atDate(LocalDate.of(1970, 1, 1));
System.out.println(ldt1); // Prints 1970-01-01T12:34

// Parse YYYY-mm
LocalDateTime ldt2 = YearMonth.parse("2016-11")
                              .atDay(1)
                              .atStartOfDay();
System.out.println(ldt2); // Prints 2016-11-01T00:00


注意,您甚至都不需要DateTimeFormatter



更新

如果必须使用DateTimeFormatter,则可以使用DateTimeFormatterBuilder创建一个,在其中可以使用parseDefaulting()方法提供缺少的值。

// Parse HH:mm
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
        .appendPattern("HH:mm") // other time fields default to 0, see "Resolving"
        .parseDefaulting(ChronoField.EPOCH_DAY, 0) // short for 1970-01-01
        .toFormatter();
LocalDateTime ldt1 = LocalDateTime.parse("12:34", formatter1);
System.out.println(ldt1); // Prints 1970-01-01T12:34

// Parse YYYY-mm
DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
        .appendPattern("uuuu-MM")
        .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) // see resolveDate()
        .parseDefaulting(ChronoField.NANO_OF_DAY, 0) // short for 00:00:00.000000000
        .toFormatter();
LocalDateTime ldt2 = LocalDateTime.parse("2016-11", formatter2);
System.out.println(ldt2); // Prints 2016-11-01T00:00


至于成功解析所需的字段,请参阅:


DateTimeFormatter - Resolving
IsoChronology.resolveDate()

关于java - DateTimeFormatter归零为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38491482/

10-09 05:37