Java8 DateTimeFormatter am/pm

妖精的绣舞 提交于 2019-11-27 05:54:28

问题


I am trying to parse some dates, but the DateTimeParser seems to disagree with me on what is valid

import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.util.Locale

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy hh:mma z", Locale.US))

When I try this it says

java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 17

So something is wrong with the hours? When I drop one of the 'h' it gets further ( altough it should just 0-pad my hours ), but then it doesn't like the pm-stuff

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy h:mma z", Locale.US))
java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 21

I don't know what his exact problem is. When I try 'hh:mmaa' as a pattern it says that it doesn't like two a and now i am stuck, since the error messages are not helpful.


回答1:


a expects either PM or AM in upper case. To get a case insensitive formatter you need to build it manually:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("EEE MMM dd, yyyy h:mma z")
        .toFormatter(Locale.US);

Note that you will get a new error because the 16th of July is not a Wednesday.




回答2:


It turns out this solution also resolves trying to parse mixed-case months (e.g., "Jul") using "MMM".



来源:https://stackoverflow.com/questions/38250379/java8-datetimeformatter-am-pm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!