import javax.swing.JOptionPane;
class Fecha {
   public static boolean validarFormato(String cadena) {
      boolean bandera= (cadena.length() == 10);
      if (bandera) {
        for (int i=0;i<4;i++) //validar que aaaa sean digitos
         bandera = (bandera && Character.isDigit(cadena.charAt(i)));
        for (int i=5;i<7;i++) //validar que mm sean digitos
         bandera = (bandera && Character.isDigit(cadena.charAt(i)));
        for (int i=8;i<10;i++) //validar que dd sean digitos
         bandera = (bandera && Character.isDigit(cadena.charAt(i)));
        bandera = (bandera && cadena.charAt(4)=='/' && cadena.charAt(7)=='/');
      }
      return bandera;
   }
   public static int anio(String cadena) throws NumberFormatException {
     String sAnio=   cadena.substring(0,4);
     return Integer.parseInt(sAnio);
   }
   public static int mes(String cadena) throws NumberFormatException {
     String sMes=   cadena.substring(5,7);
     return Integer.parseInt(sMes);
   }
   public static int dia(String cadena) throws NumberFormatException {
     String sDia=   cadena.substring(8,10);
     return Integer.parseInt(sDia);
   }
   public static boolean validarMes(String cadena) {
     try {
      int mes=mes(cadena);
      return (mes>=1 && mes <=12 );
     } catch (NumberFormatException excepcion) {
       return false;
     }
   }
   public static final int [] DIAS_POR_MES=
     {31,28,31,30,31,30,31,31,30,31,30,31 };
   public static boolean validarDia(String cadena){
      try {
          int anio = anio(cadena);
          int mes = mes(cadena);
          int dia = dia(cadena);
          int limite = DIAS_POR_MES[mes-1];
          if ( (anio%4==0) && (mes == 2) ) limite++;
          return ( dia>=1 && dia<=limite);
      } catch (NumberFormatException excepcion) {
       return false;
     }
   }
   public static void validar(String cadena) throws Exception {
       if (!validarFormato(cadena)) 
          throw new Exception("Formato invalido "+cadena);
       if (!validarMes(cadena))
          throw new Exception("Mes invalido "+cadena);
      if (!validarDia(cadena))
          throw new Exception("Dia invalido "+cadena);
   }
   public static String preguntar() {
    boolean salir=false;
    String cadena=null;
    do{
      cadena=
      JOptionPane.showInputDialog(null,"Fecha (aaaa/mm/dd)");
      if (cadena!=null) {
         try {
          validar(cadena);
          salir=true;
         } catch (Exception excepcion ){
             JOptionPane.showMessageDialog(null,excepcion.getMessage());
         }
      }
     } while (!salir);
      return cadena;
   }
}