当我这样做时
String datum = "20130419233512";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(ZoneId.of("Europe/Berlin"));
OffsetDateTime datetime = OffsetDateTime.parse(datum, formatter);
我得到以下异常:
java.time.format.DateTimeParseException: Text '20130419233512' could not be parsed:
Unable to obtain OffsetDateTime from TemporalAccessor: {InstantSeconds=1366407312},ISO,Europe/Berlin resolved
to 2013-04-19T23:35:12 of type java.time.format.Parsed
如何解析日期时间字符串,以便将其始终解释为来自“欧洲/柏林”时区?
问题在于,a ZoneIdis
和a ZoneOffsetis
之间存在差异。要创建一个OffsetDateTime
,您需要一个区域偏移量。但是,aZoneId
和a之间没有一对一的映射关系,ZoneOffset
因为它实际上取决于当前的夏时制时间。对于ZoneId像“欧洲/柏林”一样的商品,夏季有一个偏移量,而冬季有一个不同的偏移量。
在这种情况下,使用aZonedDateTime
代替会更容易OffsetDateTime
。在解析期间,ZonedDateTime
将正确设置为"Europe/Berlin"
区域ID,并且还会根据要解析的日期有效的夏时制设置偏移量:
public static void main(String[] args) {
String datum = "20130419233512";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(ZoneId.of("Europe/Berlin"));
ZonedDateTime datetime = ZonedDateTime.parse(datum, formatter);
System.out.println(datetime.getZone()); // prints "Europe/Berlin"
System.out.println(datetime.getOffset()); // prints "+02:00" (for this time of year)
}
请注意,如果您确实要使用OffsetDateTime,可以使用ZonedDateTime.toOffsetDateTime()
将转换ZonedDateTime
为OffsetDateTime
。
当我这样做的时候 如何解析datetime字符串,以便将其解释为始终来自时区“欧洲/柏林”?
我有一个以下格式的日期,我需要解析它,并转换成一个纪元时间。 关于我做错了什么有什么帮助吗?
我经常遇到这样的异常: 我做错了什么?
我有这段代码: 但我在解析时出现了这个错误:
问题内容: 我在将字符串格式化为ZonedDateTime时遇到麻烦。 我的客户希望使用ddMMyyyyhhmmss之类的日期作为日期,而没有分隔符或类似的内容。 这是我到目前为止所做的 当它正确生成字符串时,在创建LocalDateTime变量的解析过程中会发生错误 在SO上搜索,我发现对同一问题的一些答案建议使用LocalDateTime类作为中间类,然后解析为ZonedDateTime,但它
问题内容: 使用Java 1.8.0_51时,以下代码(摘自无法从TemporalAccessor获取OffsetDateTime) 引发异常: 这次我在做什么错? 问题答案: 您忘记设置时间了。 如果将我的答案与代码进行比较,您会注意到唯一的区别是时间信息丢失。一个包含时间信息,并从当前的格式不处理它,实例不能形成即可。 您还可以在包含以下内容的stacktrace中看到它 根据您的需要,您可以