我正在尝试使用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);
任何猜测?
摆脱方括号。并将另一个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]");
所有功劳归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
。>>