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)
我怎样才能转换该字符串?
OffsetDateTime.parse( \n "Fri, 07 Aug 2020 18:00:00 +0000" , \n DateTimeFormatter.RFC_1123_DATE_TIME \n)\nRun Code Online (Sandbox Code Playgroud)\n\nLocalDateTime是错误的班级您的输入字符串包含+0000指示相对于 UTC 的偏移量。
所以你不应该使用LocalDateTime. 该类故意缺少任何时区或偏移量的概念。使用LocalDateTime,您的字符串Fri, 07 Aug 2020 18:00:00 +0000将在 2020 年 8 月 7 日变成 6M,但我们不知道那是日本东京的下午 6 点、法国图卢兹的下午 6 点,还是美国俄亥俄州托莱多的下午 6 点 \xe2\x80\x94 所有不同的时刻相隔几个小时。
OffsetDateTime相反,该值应解析为OffsetDateTime.
您的输入格式是RFC 1123的格式。该特定格式是在java.time中预定义的。
\nOffsetDateTime.parse( \n "Fri, 07 Aug 2020 18:00:00 +0000" , \n DateTimeFormatter.RFC_1123_DATE_TIME \n)\nRun Code Online (Sandbox Code Playgroud)\n\n\nodt.toString(): 2020-08-07T18:00Z
\n
| 归档时间: |
|
| 查看次数: |
9591 次 |
| 最近记录: |