fork download
  1. import java.time.LocalDate;
  2. import java.time.LocalTime;
  3. import java.time.ZoneId;
  4. import java.time.ZonedDateTime;
  5. import java.time.format.DateTimeFormatter;
  6. import java.time.format.DateTimeFormatterBuilder;
  7. import java.util.Locale;
  8. import java.util.stream.Stream;
  9.  
  10. public class Main {
  11. public static void main(String[] args) {
  12. DateTimeFormatter dtf = new DateTimeFormatterBuilder()
  13. .parseCaseInsensitive() //To parse in case-insensitive way e.g. AM, am
  14. .appendPattern("h:m[ ]a") // Notice single h and m and optional space in bracket
  15. .toFormatter(Locale.ENGLISH);
  16.  
  17. ZoneId tz = ZoneId.of("America/Los_Angeles");
  18.  
  19. //Test
  20. Stream.of(
  21. "08:20 am",
  22. "08:20 pm",
  23. "08:20 AM",
  24. "08:20 PM",
  25. "8:20 am",
  26. "08:5 pm",
  27. "08:5pm",
  28. "8:5am"
  29. ).forEach(s -> System.out.println(ZonedDateTime.of(LocalDate.now(tz), LocalTime.parse(s, dtf), tz)));
  30. }
  31. }
Success #stdin #stdout 0.14s 53132KB
stdin
Standard input is empty
stdout
2021-06-06T08:20-07:00[America/Los_Angeles]
2021-06-06T20:20-07:00[America/Los_Angeles]
2021-06-06T08:20-07:00[America/Los_Angeles]
2021-06-06T20:20-07:00[America/Los_Angeles]
2021-06-06T08:20-07:00[America/Los_Angeles]
2021-06-06T20:05-07:00[America/Los_Angeles]
2021-06-06T20:05-07:00[America/Los_Angeles]
2021-06-06T08:05-07:00[America/Los_Angeles]