0

DateTimeParseExcpetion尝试转换字符串时得到一个2020-04-01T08:53:47.000+02:00 00:00

String date = "2020-04-01T08:53:47.000+02:00 00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
parsedDate = LocalDateTime.parse(date,formatter).toString();
System.out.println(parsedDate);
4

3 回答 3

4

您的模式与您的字符串不同。检查最后一部分在哪里000+02:00 00:00

你的模式是:SSSz

如果你试试这个:

String date = "2020-04-01T08:53:47.000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");

它会起作用,因为你的约会就像你的模式。请注意,日期中的每个数字也都符合模式。

但是对于您的约会,有一个没有意义的空白空间,因此删除它,代码可以完美运行。

String date = "2020-04-01T08:53:47.000+02:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");

输出:

2020-04-01T08:53:47

请注意,这z是本地时间,表示“零小时偏移”或“祖鲁时间”(UTC),您可以使用Locale.

于 2020-11-22T11:30:33.800 回答
2

使用内置格式化程序

内置DateTimeFormatter.ISO_OFFSET_DATE_TIME匹配您的字符串中我们可以理解的部分。它可以只解析那部分而忽略其余部分。

    String date = "2020-04-01T08:53:47.000+02:00 00:00";
    ParsePosition pp = new ParsePosition(0);
    OffsetDateTime odt = OffsetDateTime.from(
            DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(date, pp));
    
    System.out.println("Date and time: " + odt);
    System.out.println("Unparsed text: " + date.substring(pp.getIndex()));

输出:

Date and time: 2020-04-01T08:53:47+02:00
Unparsed text:  00:00

由于您的字符串包含与 UTC 的偏移量,OffsetDateTime因此是要解析的正确类。如果我们使用LocalDateTIme,偏移量将被忽略,最终我们将不知道要在哪个偏移量处解释时间,也就是说,我们无法知道它是哪个时间点。用OffsetDateTime时间点是明确的。如果要转换为您自己时区的时间,请转换为ZonedDateTime(仍然不是LocalDateTime)。

    ZonedDateTime timeInMyTimeZone = odt.atZoneSameInstant(ZoneId.systemDefault());
    System.out.println("Date and time: " + timeInMyTimeZone);

示例输出:

Date and time: 2020-04-01T11:53:47+05:00[Asia/Aqtobe]

链接

文档链接:

于 2020-11-24T19:04:21.657 回答
2

日期时间字符串末尾的 00:00对我来说没有意义。剥离后解析日期时间字符串。

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDate = "2020-04-01T08:53:47.000+02:00 00:00";
        strDate = strDate.substring(0, strDate.lastIndexOf(' '));
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSz", Locale.ENGLISH);
        LocalDateTime parsedDate = LocalDateTime.parse(strDate, formatter);
        System.out.println(parsedDate);

        OffsetDateTime odt = OffsetDateTime.parse(strDate);
        System.out.println(odt);
        System.out.println(odt.getOffset());
    }
}

输出:

2020-04-01T08:53:47
2020-04-01T08:53:47+02:00
+02:00

注意:您可以解析您的日期时间字符串( 00:00从它的末尾剥离后)OffsetDateTime以保留区域偏移信息。

于 2020-11-22T11:27:11.587 回答