使用DateTimeFormatter失败的字符串解析为LocalDateTime

问题描述 投票:1回答:2

我正在尝试使用DateTimeFormatter和LocalDateTime将简单的字符串[08 / May / 2020:09:14:05 +0000]解析为LocalDateTime,但由于某些原因,它似乎无法正常工作。我曾尝试对DD,hh,X,x或Z等格式进行其他更改,但无法正常工作。

这里是代码:

String log = "[08/May/2020:09:14:05 +0000]";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[d/MMM/yyyy:HH:mm:ss x]");
LocalDateTime odt = LocalDateTime.parse(log, fmt);
System.out.println(odt);

任何猜测?

java date datetime datetime-parsing
2个回答
0
投票

摆脱方括号。并将另一个x添加到时区格式。

log = log.replaceAll("\\[", "");
log = log.replaceAll("]", "");
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[d/MMM/yyyy:HH:mm:ss xx]");

您可以使用以下方式添加括号

System.out.println("[" + odt + "]");

此外,您可能想在该月的日期添加另一个'd'。

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[dd/MMM/yyyy:HH:mm:ss xx]");

0
投票

所有功劳归Andreas。他在评论中的建议足够好,可以作为答案发表。

    String log = "[08/May/2020:09:14:05 +0000]";
    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("'['dd/MMM/uuuu:HH:mm:ss xx']'", Locale.US);
    LocalDateTime odt = LocalDateTime.parse(log, fmt);
    System.out.println(odt);

输出为:

2020-05-08T09:14:05

[在格式模式字符串中,方括号[]通常用于包围格式的可选部分。由于您要指定日期时间字符串中包含方括号,因此请将其括在格式模式字符串中的撇号中。这消除了方括号中否则的含义。

也将xx用于带有小时和分钟且没有冒号的UTC偏移,例如+0000。>>

© www.soinside.com 2019 - 2024. All rights reserved.