首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OffsetDateTime客户解析器

OffsetDateTime客户解析器
EN

Stack Overflow用户
提问于 2021-02-23 22:22:41
回答 2查看 41关注 0票数 0

你好,我尝试使用DateTimeFormatter将字符串20110330174824917解析为OffsetDateTime,因此

代码语言:javascript
复制
 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.LocalDateTime.parse(LocalDateTime.java:492)处的java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1952)处的java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)处的索引8处找到未分析的文本

嘿,伙计们,看起来这个问题和java 8 https://bugs.openjdk.java.net/browse/JDK-8031085有关。

感谢大家的帮助

EN

回答 2

Stack Overflow用户

发布于 2021-02-23 22:56:38

DateTimeFormatter#withZone

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

代码语言:javascript
复制
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);
    }
}

输出:

代码语言:javascript
复制
2011-03-30T17:48:24.917+01:00
票数 2
EN

Stack Overflow用户

发布于 2021-02-23 22:46:20

您可以为格式化程序定义使用的Zone,并将输入字符串与正确的区域偏移连接在一起

代码语言:javascript
复制
// 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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66334981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档