索引 0 处的 DateTimeParseException 与 ThreeTenABP
DateTimeParseException at index 0 with ThreeTenABP
我正在尝试使用 ThreeTenABP 解析时间字符串(因为我必须支持最低 SDK 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-17T17:26:38.000Z
之类的字符串中。
太糟糕了,它不接受原始字符串。
这有点棘手好吧。
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 类 解析 ISO 8601 格式时没有任何明确的格式化程序(我自己已经在 Stack Overflow 上写过很多次了)。这并不完全正确:java.time 的 类 解析 最常见的 ISO 8601 格式变体,没有任何显式格式化程序。 ISO 8601 具有相当多的语法自由,有些是始终允许的,有些可以在交换 ISO 8601 格式的各方之间有选择地达成一致。抱歉,您 运行 变成了 Instant.parse()
无法处理的变体。
我正在尝试使用 ThreeTenABP 解析时间字符串(因为我必须支持最低 SDK 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-17T17:26:38.000Z
之类的字符串中。
太糟糕了,它不接受原始字符串。
这有点棘手好吧。
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 类 解析 ISO 8601 格式时没有任何明确的格式化程序(我自己已经在 Stack Overflow 上写过很多次了)。这并不完全正确:java.time 的 类 解析 最常见的 ISO 8601 格式变体,没有任何显式格式化程序。 ISO 8601 具有相当多的语法自由,有些是始终允许的,有些可以在交换 ISO 8601 格式的各方之间有选择地达成一致。抱歉,您 运行 变成了 Instant.parse()
无法处理的变体。