我试图用ThreeTenABP解析时间字符串(因为我必须支持min 19)。我认为字符串是ISO 8601:
20200117T172638.000Z
我得到以下例外:
org.threeten.bp.format.DateTimeParseException: Text '20200117T172638.000Z' could not be parsed at index 0
我的代码:
Instant instant = Instant.parse("20200117T172638.000Z");
long time = instant.getEpochSecond();任何帮助都很感激。提前谢谢。
发布于 2020-01-18 15:53:06
这有点棘手,好吧。
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()不处理的变体,对不起。
发布于 2020-01-17 04:31:46
看起来,我只需要将-和:添加到字符串中,比如2020-01-17T17:26:38.000Z。
可惜它不接受原来的字符串。
https://stackoverflow.com/questions/59781056
复制相似问题