Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将格式化字符串转换为LocalDateTime_Java_Date_Datetime_Localdate - Fatal编程技术网

Java 无法将格式化字符串转换为LocalDateTime

Java 无法将格式化字符串转换为LocalDateTime,java,date,datetime,localdate,Java,Date,Datetime,Localdate,我正在尝试使用以下代码将字符串Fri August 16 2019 12:08:55 AM转换为LocalDateTime对象: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMMM d YYYY h:mm:ss a", Locale.US); String timestamp = "Fri August 16 2019 12:08:55 AM"; localDateTime = LocalDateTime.par

我正在尝试使用以下代码将字符串
Fri August 16 2019 12:08:55 AM
转换为
LocalDateTime
对象:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMMM d YYYY h:mm:ss a", Locale.US);
String timestamp = "Fri August 16 2019 12:08:55 AM";
localDateTime = LocalDateTime.parse(timestamp, formatter);
此代码引发以下异常:

java.time.format.DateTimeParseException: Text 'Fri August 16 2019 12:08:55 AM' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {WeekBasedYear[WeekFields[SUNDAY,1]]=2019, MonthOfYear=8, DayOfWeek=5, DayOfMonth=16},ISO resolved to 00:08:55 of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(Unknown Source)
    at java.time.format.DateTimeFormatter.parse(Unknown Source)
    at java.time.LocalDateTime.parse(Unknown Source)
    at suppliers.pojos.PriceFluctuationPOJO.<init>(PriceFluctuationPOJO.java:51)
    at suppliers.pojos.PriceFluctuationPOJO.readFromPriceFluctuationCSVFile(PriceFluctuationPOJO.java:163)
    at amzn.Main.main(Main.java:60)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {WeekBasedYear[WeekFields[SUNDAY,1]]=2019, MonthOfYear=8, DayOfWeek=5, DayOfMonth=16},ISO resolved to 00:08:55 of type java.time.format.Parsed
    at java.time.LocalDateTime.from(Unknown Source)
    at java.time.format.Parsed.query(Unknown Source)
java.time.format.DateTimeParseException:无法解析文本'Fri August 16 2019 12:08:55 AM':无法从TemporalAccessor获取LocalDateTime:{WeekBasedYear[WeekFields[SUNDAY,1]]=2019,MonthfYear=8,DayOfWeek=5,DayOfMonth=16},ISO解析为00:08:55,类型为java.time.format.parsed
位于java.time.format.DateTimeFormatter.createError(未知源)
位于java.time.format.DateTimeFormatter.parse(未知源)
位于java.time.LocalDateTime.parse(未知源)
在suppliers.pojos.priceinvolutionpojo.(priceinvolutionpojo.java:51)
在suppliers.pojos.priceinvolutionpojo.readfromPriceInvolutionCsvfile(priceInvolutionPojo.java:163)上
at amzn.Main.Main(Main.java:60)
原因:java.time.DateTimeException:无法从临时Accessor获取LocalDateTime:{Weekbasedyar[WeekFields[SUNDAY,1]]=2019,Monthofear=8,DayOfWeek=5,DayOfMonth=16},ISO解析为00:08:55,类型为java.time.format.Parsed
位于java.time.LocalDateTime.from(未知源)
at java.time.format.Parsed.query(未知源)
基于和线程,所以看起来格式是正确的

是什么导致了异常


谢谢

您的输入
字符串中不应该有单引号,您的模式已关闭。您想要的是
yyyy
(不是
yyy
)。像

输出(此处)


您的输入
字符串中不应该有单引号,并且您的模式已关闭。您想要的是
yyyy
(不是
yyy
)。像

输出(此处)


不需要在字符串中添加单引号,请删除单引号不需要在字符串中添加单引号,请删除单引号操作!我错误地复制了用于生成原始字符串SimpleDataFormat dateFormatter=new SimpleDataFormat的模式(“EEE MMMM YYYY h:mm:ss a”);但您是对的DateTimeFormatter与SimpleDateFormat有不同的格式要求。谢谢@S.O.S
SimpleDateFormat
是出了名的麻烦和过时,您根本不应该使用它。在任何情况下,它在小写和大写Y之间都有相同的区别。对于格式化,98%或99%的情况下结果都是相同的,因此您不太可能立即发现错误,但使用不正确的大小写仍然是一个错误。哎呀!我错误地复制了用于生成原始字符串SimpleDataFormat dateFormatter=new SimpleDataFormat的模式(“EEE MMMM YYYY h:mm:ss a”);但您是对的DateTimeFormatter与SimpleDateFormat有不同的格式要求。谢谢@S.O.S
SimpleDateFormat
是出了名的麻烦和过时,您根本不应该使用它。在任何情况下,它在小写和大写Y之间都有相同的区别。对于格式化,98%或99%的情况下结果都是相同的,因此您不太可能立即发现错误,但使用不正确的大小写仍然是一个错误。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
        "EEE MMMM d yyyy hh:mm:ss a", Locale.US);
String timestamp = "Fri August 16 2019 12:08:55 AM";
LocalDateTime localDateTime = LocalDateTime.parse(timestamp, formatter);
System.out.println(localDateTime);
2019-08-16T00:08:55