如何将"Nov 20, 2016 12:00:00 AM"解析为本地日期时间?



我发现了一个非常有趣的bug或类似的东西。

我使用这种日期格式MMM d, yyyy hh:mm:ss a,它会像这个一样打印日期

Aug 13, 2020 01:19:50 pm

但是,当我将Nov 20, 2016 12:00:00 AM解析为LocalDateTime时,它会抛出异常

java.time.format.DateTimeParseException: Text 'Nov 20, 2016 12:00:00 AM' could not be parsed at index 22.

在我把"AM"改为"AM"之后,它就完美地工作了!所以LocalDateTime实际上不能解析日期,因为大写字母a?我如何解决这个问题,而不将"AM"替换为"AM",将"PM"替换为

编辑

SimpleDateTime格式没有这个问题,他忽略了a p e s字母寄存器(我的意思是大写或小写(,我不想将Date转换为LocalDateTime

编辑2

MMM d, yyyy hh:mm:ss A将"a"替换为"a"也不起作用

您需要以不区分大小写的方式解析它。此外,请确保使用英语语言环境(例如Locale.ENGLISHLocale.US等(,因为元素的名称是用相应语言环境中的本地化字符串表示的。

演示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Given date-time string
String strDateTime = "Nov 20, 2016 12:00:00 AM";
// Define the formatter
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("MMM d, u h:m:s a")                                       
.toFormatter(Locale.ENGLISH);                                     
// Parse the given date-time into LocalDateTime using formatter
LocalDateTime ldt = LocalDateTime.parse(strDateTime, formatter);
System.out.println(ldt);
}
}

输出:

2016-11-20T00:00

相关内容

  • 没有找到相关文章

最新更新