fork download
  1. import java.time.LocalDateTime;
  2. import java.time.format.DateTimeFormatter;
  3. import java.time.format.DateTimeFormatterBuilder;
  4. import java.time.format.DateTimeParseException;
  5. import java.time.format.ResolverStyle;
  6. import java.time.format.SignStyle;
  7. import java.time.temporal.ChronoField;
  8. import java.util.Locale;
  9. import java.util.stream.Stream;
  10.  
  11. public class Main {
  12. public static void main(String[] args) {
  13. DateTimeFormatter dtf =
  14. new DateTimeFormatterBuilder()
  15. .appendValue(ChronoField.YEAR, 1, 4, SignStyle.NORMAL)
  16. .appendLiteral('-')
  17. .appendValue(ChronoField.MONTH_OF_YEAR, 1, 2, SignStyle.NORMAL)
  18. .appendLiteral('-')
  19. .appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NORMAL)
  20. .appendLiteral(' ')
  21. .appendValue(ChronoField.HOUR_OF_DAY, 1, 2, SignStyle.NORMAL)
  22. .appendLiteral(':')
  23. .appendValue(ChronoField.MINUTE_OF_HOUR, 1, 2, SignStyle.NORMAL)
  24. .appendLiteral(':')
  25. .appendValue(ChronoField.SECOND_OF_MINUTE, 1, 2, SignStyle.NORMAL)
  26. .optionalStart()
  27. .appendLiteral('.')
  28. .appendFraction(ChronoField.NANO_OF_SECOND, 0, 3, false)
  29. .optionalEnd()
  30. .toFormatter(Locale.ENGLISH)
  31. .withResolverStyle(ResolverStyle.STRICT);
  32.  
  33. // Test
  34. Stream.of(
  35. "2008-06-31 23:59:59.000",
  36. "2008-06-30 23:59:59.000",
  37. "2008-6-30 23:59:59.000",
  38. "2008-6-8 23:59:59.000",
  39. "2008-6-8 2:59:59.000",
  40. "2008-6-8 23:5:59.000",
  41. "2008-6-8 23:59:9.000",
  42. "2008-06-30 23:59:59"
  43.  
  44. ).forEach (s -> {
  45. try {
  46. LocalDateTime ldt = LocalDateTime.parse(s, dtf);
  47. System.out.println(ldt);
  48. }catch(DateTimeParseException e) {
  49. System.out.printf("%s is an invalid date-time string.%n", s);
  50. // ...
  51. }
  52. });
  53. }
  54. }
Success #stdin #stdout 0.12s 49880KB
stdin
Standard input is empty
stdout
2008-06-31 23:59:59.000 is an invalid date-time string.
2008-06-30T23:59:59
2008-06-30T23:59:59
2008-06-08T23:59:59
2008-06-08T02:59:59
2008-06-08T23:05:59
2008-06-08T23:59:09
2008-06-30T23:59:59