首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引0处的DateTimeParseException和ThreeTenABP

索引0处的DateTimeParseException和ThreeTenABP
EN

Stack Overflow用户
提问于 2020-01-17 04:07:53
回答 2查看 101关注 0票数 1

我试图用ThreeTenABP解析时间字符串(因为我必须支持min 19)。我认为字符串是ISO 8601:

20200117T172638.000Z

我得到以下例外:

org.threeten.bp.format.DateTimeParseException: Text '20200117T172638.000Z' could not be parsed at index 0

我的代码:

代码语言:javascript
复制
Instant instant = Instant.parse("20200117T172638.000Z");
long time = instant.getEpochSecond();

任何帮助都很感激。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-18 15:53:06

这有点棘手,好吧。

代码语言:javascript
复制
    DateTimeFormatter instantFormatter = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmss.SSSX");
    String s = "20200117T172638.000Z";
    Instant instant = instantFormatter.parse(s, Instant.FROM);
    System.out.println(instant);

这个片段的输出是

2020-01-17T17:26:38Z

如果Instant和你的问题一样有效的话,从时代开始就能得到秒,所以我不重复了。

使用描述输入字符串精确格式的格式化程序。由于没有接受Instant.parse作为第二个参数的DateTimeFormatter方法,所以我们需要使用(泛型) DateTimeFormatter.parse(CharSequence, TemporalQuery<T>)方法进行相反的解析。我们需要将查询Instant.FROM传递给该方法,因为后端是为没有方法引用的Java开发的。(使用来自Java 8的本机java.time以及更高版本,我们将使用方法引用Instant::from)。

我知道您的字符串是ISO 8601格式的。而且我知道,据说java.time类解析ISO8601格式时没有任何显式的格式化程序(我自己已经在堆栈溢出上写了很多次了)。这不是完全正确的: java.time类解析最常见的ISO8601格式变体,没有任何显式格式化程序。ISO 8601提供了相当多的语法自由,有些始终是允许的,有些可以在交换ISO 8601格式的各方之间随意商定。您遇到了Instant.parse()不处理的变体,对不起。

票数 0
EN

Stack Overflow用户

发布于 2020-01-17 04:31:46

看起来,我只需要将-:添加到字符串中,比如2020-01-17T17:26:38.000Z

可惜它不接受原来的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59781056

复制
相关文章

相似问题

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