Java8 DateTimeFormatter am/pm

14,765

Solution 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.

Solution 2

Note that the case of AM and PM depends on your locale!

So if your locale is US it's expected to be upper case, but if it's UK it's expected to be lower case.

See: Localize the period (AM/PM) in a time stamp to another language for more details.

Share:
14,765

Related videos on Youtube

assylias
Author by

assylias

Author of jBloomberg, a high level wrapper around the Bloomberg Desktop Java API My contributions on StackExchange websites are released under the MIT License.

Updated on September 14, 2022

Comments

  • assylias
    assylias over 1 year

    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.

  • Matthijs Wessels
    Matthijs Wessels over 6 years
    wow.. Any idea why the default doesn't support lower case? I was converting old java.util.Date code to java.time and the SimpleDateFormat had no problems with it.
  • Matthew
    Matthew over 3 years
    The case depends upon your locale setting. See my answer below.