java.time.temporal.UnsupportedTemporalTypeException:不支持的字段:OffsetSeconds

问题描述

我正在使用以下功能接口来制作通用自定义日期格式转换器。

7

功能接口的实现如下

@FunctionalInterface
public interface CustomDateFormatterInterface {
String convertStringToDate();
}

我想获得以下日期格式 CustomDateFormatterInterface customDateFormatterInterface = () -> { LocalDateTime localDateTime = LocalDateTime.Now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ") .withLocale(Locale.getDefault()) .withZone(ZoneId.systemDefault()); Instant Now = Instant.Now(); String formatted = dateTimeFormatter.format(localDateTime); LocalDateTime parsed = dateTimeFormatter.parse(formatted,LocalDateTime::from); return parsed.toString(); }; 。但我得到了一个例外。如果我尝试使用 2011-04-27T19:07:36+0000 Instant 我得到的输出

Now

我该怎么办,谁能告诉我哪里出错了?如果需要,让我知道任何其他事情。

解决方法

使用具有时区偏移量的 OffsetDateTime 并将其截断为秒

在 ISO-8601 日历系统中与 UTC/Greenwich 有偏移的日期时间,例如 2007-12-03T10:15:30+01:00。

OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));

offsetDateTime.truncatedTo(ChronoUnit.SECONDS).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); //2020-12-29T18:28:44+01:00

如果您想要自定义格式,请使用 DateTimeFormatterBuilder

构建它
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);

DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
            .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
            .appendOffset("+HHMM","+0000")
            .toFormatter();
offsetDateTime.truncatedTo(ChronoUnit.SECONDS).format(dateTimeFormatter); //2020-12-29T17:36:51+0000

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...