提问人:nuhkoca 提问时间:10/24/2018 更新时间:10/25/2018 访问量:608
无法在索引 33 处解析文本
Text could not be parsed at index 33
问:
我正在研究ThreeTenABP库来解析日期和时间。但是,它正在崩溃。我使用的 API 发送 DateTime 喜欢;
2018-10-20T14:27:47.3949709+03:00
这是我尝试解析的方式;
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
.toFormatter();
Timber.d(LocalDateTime.parse("2018-10-20T14:27:47.3949709+03:00", formatter).toString());
我收到以下错误:
无法在索引处解析文本“2018-10-20T14:27:47.3949709+03:00” 33
提前致谢。
答:
2赞
leonardkraemer
10/24/2018
#1
错误消息说明:
2018-10-20T14:27:47.3949709+03:00
因此,长度为 33 个字符
文本“2018-10-20T14:27:47.3949709+03:00”无法在索引 33 处解析
意味着它需要第 34 个字符,但该字符不存在(索引为 0)。
问题
您定义的方式将接受 2018-10-20T14:27:47.3949709+03:002018-10-20'Formatter
溶液:
要克服这个问题,您可以删除.append(DateTimeFormatter.ofPattern("yyyy-MM-dd")
或者使用 startOptional
和Formatter
endOptional
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.optionalStart()
.append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.optionalEnd()
.optionalStart()
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
.optionalEnd().toFormatter();
您可以在 https://ideone.com/RDVHYG 上看到该示例
旁注:“yyyy-MM-dd”没有产生足够的信息,因此我添加了“HH:mm”LocalDateTime
评论
0赞
nuhkoca
10/25/2018
嗨@leonardkraemer我尝试了您的解决方案,但是它抛出了以下错误:文本“2018-10-24T16:37:32.693Z”无法在索引 2 处解析
0赞
leonardkraemer
10/25/2018
不要介意导入,我在 android 上用实际的 ThreeTenABP 尝试过java.time
0赞
nuhkoca
10/25/2018
嗨,@leonardkraemer,是的,它有效。你救了我的一天!谢谢。我接受了答案:)日安!
0赞
nuhkoca
10/25/2018
嗨,@leonardkraemer,最后一个问题:)无论我有什么模式,它总是给我相同的输出。例如,我设置了一个模式,如“dd MM yyyy EEEE”,我预计输出 2018 年 10 月 20 日星期三,但它总是给出 2018-10-20
评论
Timer.d()
System.out.println()
Log.d