【发布时间】:2020-08-06 16:37:55
【问题描述】:
我有这个字符串
2020 年 8 月 7 日星期五 18:00:00 +0000
我需要将其转换为 LocalDateTime
我尝试了几种方法:
创建一个 DateTimeFormatter 并解析字符串
String dateString = "Fri, 07 Aug 2020 18:00:00 +0000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, dd MMM yyyy HH:mm:ss", Locale.getDefault());
LocalDateTime parsedDate = LocalDateTime.parse(publishedString, formatter);
使用 SimpleDateFormat 将其转换为 Date,然后将 resultDate 转换为 LocalDateTime
String dateString = "Fri, 07 Aug 2020 18:00:00 +0000";
SimpleDateFormat dateFormatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
Date date = dateFormatter.parse(publishedString);
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
两种解决方案都给了我同样的例外:
java.time.format.DateTimeParseException: Text 'Fri, 07 Aug 2020 18:00:00 +0000' could not be parsed
at index 0 at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
如何转换该字符串?
【问题讨论】:
-
你的电脑能“理解”英语吗?你对那里的 Locale 有什么要求?
-
DateTimeFormatter.ofPattern("E, dd MMM yyyy HH:mm:ss Z", Locale.ROOT)应该可以工作。 1. 问题是您的系统语言环境可能不是英语,因此“Fri”未正确解析和 2. 问题是您最后忘记了模式中的偏移部分 -
我猜,你的语言环境是
Locale.ITALY。尝试将其更改为Locale.ENGLISH。另外,图案不完整。尝试使用DateTimeFormatter.ofPattern("E, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH)。在此之后它应该工作。另见:java.time DateTimeFormatter pattern for timezone offset
标签: java date localdatetime