0

您好,我尝试使用 DateTimeFormatter 将 String 20110330174824917 解析为 OffsetDateTime 所以

 public static void main(String[] args)  {
       // System.out.println(OffsetDateTime.parse("20110330174824917", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")));
        System.out.println(LocalDateTime.parse("20110330174824917", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")));
    }

但我
在线程“main”java.time.format.DateTimeParseException:无法解析文本“20110330174824917”中出现异常,在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1952) 处的索引 8 处找到未解析文本java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 在 java.time.LocalDateTime.parse(LocalDateTime.java:492)


嘿伙计们,这个问题似乎与 java 8 有关 https://bugs.openjdk.java.net/browse/JDK-8031085

谢谢大家的帮助

4

2 回答 2

2

DateTimeFormatter#withZone

您的日期时间字符串没有时区信息,因此,为了将其解析为OffsetDateTime,您需要明确传递时区信息。您可以使用DateTimeFormatter#withZone解析日期时间字符串ZonedDateTime,您可以将其转换为OffsetDateTimeusing ZonedDateTime#toOffsetDateTime

import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDateTime = "20110330174824917";
        
        // Change the ZoneId as per your requirement e.g. ZoneId.of("Europe/London")
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS", Locale.ENGLISH)
                                                .withZone(ZoneId.systemDefault());
        
        OffsetDateTime odt = ZonedDateTime.parse(strDateTime, dtf)
                                            .toOffsetDateTime();
        System.out.println(odt);
    }
}

输出:

2011-03-30T17:48:24.917+01:00
于 2021-02-23T14:56:37.503 回答
1

您可以定义用于Zone格式化程序并将输入字符串与正确的区域偏移量连接

// note the added Z at the end of the pattern for the offset
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSSZ").withZone(ZoneId.of("UTC"));

OffsetDateTime dateTime = OffsetDateTime.parse("20110330174824917" + "+0000", formatter);
于 2021-02-23T14:46:19.737 回答