fork download
  1. import java.time.LocalDate;
  2. import java.time.format.DateTimeFormatter;
  3. import java.time.format.DateTimeParseException;
  4. import java.time.format.ResolverStyle;
  5.  
  6. class Ideone {
  7.  
  8. private static final DateTimeFormatter BASIC = DateTimeFormatter.ofPattern("dd/MM/uuuu");
  9.  
  10. public static void main(String[] args) {
  11. testes("29/02/2016", "29/02/2017", "30/06/2017", "31/06/2017", "04/27/2017", "abacaxi", "99/99/2000");
  12. }
  13.  
  14. private static void testes(String... valores) {
  15. for (String valor : valores) {
  16. teste(valor);
  17. }
  18. }
  19.  
  20. private static void teste(String valor) {
  21. for (ResolverStyle rs : ResolverStyle.values()) {
  22. DateTimeFormatter d = BASIC.withResolverStyle(rs);
  23. try {
  24. LocalDate date = LocalDate.parse(valor, d);
  25. String resultado = date.format(d);
  26. System.out.println(valor + " formatado com " + rs + " é " + resultado + ".");
  27. } catch (DateTimeParseException e) {
  28. System.out.println(valor + " não é válido se for formatado com " + rs + ".");
  29. }
  30. }
  31. System.out.println();
  32. }
  33. }
Success #stdin #stdout 0.14s 4386816KB
stdin
Standard input is empty
stdout
29/02/2016 formatado com STRICT é 29/02/2016.
29/02/2016 formatado com SMART é 29/02/2016.
29/02/2016 formatado com LENIENT é 29/02/2016.

29/02/2017 não é válido se for formatado com STRICT.
29/02/2017 formatado com SMART é 28/02/2017.
29/02/2017 formatado com LENIENT é 01/03/2017.

30/06/2017 formatado com STRICT é 30/06/2017.
30/06/2017 formatado com SMART é 30/06/2017.
30/06/2017 formatado com LENIENT é 30/06/2017.

31/06/2017 não é válido se for formatado com STRICT.
31/06/2017 formatado com SMART é 30/06/2017.
31/06/2017 formatado com LENIENT é 01/07/2017.

04/27/2017 não é válido se for formatado com STRICT.
04/27/2017 não é válido se for formatado com SMART.
04/27/2017 formatado com LENIENT é 04/03/2019.

abacaxi não é válido se for formatado com STRICT.
abacaxi não é válido se for formatado com SMART.
abacaxi não é válido se for formatado com LENIENT.

99/99/2000 não é válido se for formatado com STRICT.
99/99/2000 não é válido se for formatado com SMART.
99/99/2000 formatado com LENIENT é 07/06/2008.