org.threeten.bp.format.DateTimeParseException:无法在索引 19 处解析文本“2018-07-22T14:00:00-03:00”

org.threeten.bp.format.DateTimeParseException: Text '2018-07-22T14:00:00-03:00' could not be parsed at index 19

提问人:Alan Bastos 提问时间:9/28/2018 更新时间:9/28/2018 访问量:1551

问:

    public static String formatter(String dateInPattern, String dateOutPattern) {
    OffsetDateTime dateInPatternFormat = OffsetDateTime.parse(dateInPattern, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
    Date dateInValue = DateTimeUtils.toDate(Instant.parse(dateInPatternFormat.toString()));
    OffsetDateTime dateOutPatternFormat = OffsetDateTime.parse(dateOutPattern);

    return dateOutPatternFormat.format(DateTimeFormatter.ofPattern(dateInValue.toString()));

}

我需要在此模式下输入日期 yyyy-MM-dd'T'HH:mm:ss'Z' 这等于 (2018-07-22T14:00:00-03:00)。 我需要这种模式的输出 dd/MM/yyyy

请帮帮我。

我在 android :( 上遇到了很多日期问题

java android 日期时间解析 parseexception threetenbp

评论

0赞 Eugen Pechanec 9/28/2018
虽然公认的答案有助于理解大局,但让我们也解释一下标题中的错误。 始终以 UTC 格式,则解析的字符串必须遵循以下模式。您提供了具有时间偏移量的字符串,因此解析失败。相同的输入字符串可以正确解析为 。Instantyyyy-MM-dd'T'HH:mm:ss.sssZOffsetDateTime
0赞 Anonymous 9/28/2018
对不起,我不明白你想做什么。请使用示例具体说明要传递给方法的两个参数以及所需的返回值。formatter
0赞 Anonymous 9/28/2018
当您使用 ThreeTenABP(或 ThreeTen Backport)时,请完全避免过时且设计不佳的类。ThreeTenABP具有您需要的所有功能,因此转换为JUST意味着额外且不必要的复杂性。DateDate
0赞 Alan Bastos 9/29/2018
我需要的是读取一个字符串 yyyy-MM-dd'T'HH: mm: ss'Z '的日期,并能够将其输出为 dd/MM/yyyy

答:

4赞 Andreas 9/28/2018 #1

你的代码非常混乱,名字很奇怪,你似乎混淆了模式字符串,例如,与字符串,例如。yyyy-MM-dd2018-07-22

值字符串可以在不指定 的情况下解析为 ,因为这是 的默认格式。2018-07-22T14:00:00-03:00OffsetDateTimeDateTimeFormatterOffsetDateTime

如果需要将其格式化为 ,请使用 .dd/MM/yyyyDateTimeFormatter

不知道为什么你的方法需要 2 个参数。

例:

String input = "2018-07-22T14:00:00-03:00";
OffsetDateTime offsetDateTime = OffsetDateTime.parse(input);
String output = offsetDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
System.out.println(output); // prints: 22/07/2018