在 Java 中将字符串转换为 LocalDateTime

Iva*_*ano 2 java date localdatetime

我有这个字符串

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);
Run Code Online (Sandbox Code Playgroud)

使用 SimpleDateFormat 将其转换为日期,然后将 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();
Run Code Online (Sandbox Code Playgroud)

两种解决方案都给了我同样的例外:

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)
Run Code Online (Sandbox Code Playgroud)

我怎样才能转换该字符串?

Bas*_*que 5

太长了;博士

\n
OffsetDateTime.parse( \n    "Fri, 07 Aug 2020 18:00:00 +0000" , \n    DateTimeFormatter.RFC_1123_DATE_TIME \n)\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅在 IdeOne.com 上实时运行的代码

\n

LocalDateTime是错误的班级

\n

您的输入字符串包含+0000指示相对于 UTC 的偏移量。

\n

所以你不应该使用LocalDateTime. 该类故意缺少任何时区或偏移量的概念。使用LocalDateTime,您的字符串Fri, 07 Aug 2020 18:00:00 +0000将在 2020 年 8 月 7 日变成 6M,但我们不知道那是日本东京的下午 6 点、法国图卢兹的下午 6 点,还是美国俄亥俄州托莱多的下午 6 点 \xe2\x80\x94 所有不同的时刻相隔几个小时。

\n

OffsetDateTime

\n

相反,该值应解析为OffsetDateTime.

\n

解析

\n

您的输入格式是RFC 1123的格式。该特定格式是在java.time中预定义的。

\n
OffsetDateTime.parse( \n    "Fri, 07 Aug 2020 18:00:00 +0000" , \n    DateTimeFormatter.RFC_1123_DATE_TIME \n)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

odt.toString(): 2020-08-07T18:00Z

\n
\n