- Nos entran dos fechas en el formato día (1 a 31), mes (1 a 12) y año (entero de 4 dígitos), correspondientes a la fecha de cumpleaños y la fecha actual respectivamente. Escribir un programa que calcule y visualice la edad real en años de el individuo. Si es la fecha de un bebé, debemos dar en meses reales.
- import cs1.*;
- import java.util.Date;
- import java.text.SimpleDateFormat;
- import java.text.DateFormat;
- public class ejerc14
- {
- public static void main (String[] args)
- {
- //Variables
- String cadenafecha = "0", fecha1, fecha2, numeros = "0123456789";
- int longfecha = 0, longfecha2 = 0, dia1, mes1, any1, dia2 = 0, mes2 = 0, mes3 = 0, any2 = 0, calc, calc2, calc3, sel, any3 = 0;
- char d1, d2, b1, b2, m1, m2, a1, a2, a3, a4, d1b, d2b, b1b, b2b, m1b, m2b, a1b, a2b, a3b, a4b, a1c, a2c, a3c, a4c, m1c, m2c;
- boolean error1, error2, error3;
- //Seleci—n de opci—n
- System.out.println( "Selecciona la opci—n m‡s adecuada: ");
- System.out.println( " 1 - Entra la fecha actual " + "\n 2 - Coge la fecha del sistema ");
- sel = Keyboard.readInt();
- //Introduci—n de datos
- System.out.println( "Introduce la fecha de nacimiento con formato dd/mm/aaaa: ");
- fecha1 = Keyboard.readString();
- //Seleci—n de opci—n
- if (sel == 1) {
- System.out.println( "Introduce la fecha actual con el mismo formato: ");
- fecha2 = Keyboard.readString();
- longfecha2 = fecha2.length();
- if (longfecha2 != 10)
- {
- System.out.print("La fecha introducida no tiene la longitud 10.");
- }
- else
- {
- b1b = fecha2.charAt(2); //Posici—n de caracteres
- b2b = fecha2.charAt(5);
- if ((b1b != '/') || (b2b != '/'))
- {
- System.out.print("La fecha no tiene un formato dd/mm/aaaa");
- }
- else
- {
- d1b = fecha2.charAt(0);
- d2b = fecha2.charAt(1);
- b1b = fecha2.charAt(2);
- m1b = fecha2.charAt(3);
- m2b = fecha2.charAt(4);
- a1b = fecha2.charAt(6);
- a2b = fecha2.charAt(7);
- a3b = fecha2.charAt(8);
- a4b = fecha2.charAt(9);
- error2 = ((numeros.indexOf(d1b) < 0) || (numeros.indexOf(d2b) < 0) ||
- (numeros.indexOf(m1b) < 0) || (numeros.indexOf(m2b) < 0) ||
- (numeros.indexOf(a1b) < 0) || (numeros.indexOf(a2b) < 0) ||
- (numeros.indexOf(a3b) < 0) || (numeros.indexOf(a4b) < 0));
- if (error2)
- System.out.print("Error! Alguna fecha no es v‡lida");
- else
- {
- dia2 = Integer.valueOf(fecha2.substring(0,2)).intValue();
- mes2 = Integer.valueOf(fecha2.substring(3,5)).intValue();
- any2 = Integer.valueOf(fecha2.substring(6)).intValue();
- }
- }
- }
- }
- if (sel == 2) {
- Date fecha3 = new Date();
- SimpleDateFormat format1 = new SimpleDateFormat ("dd/MM/yyyy");
- cadenafecha = format1.format(fecha3);
- mes3 = Integer.valueOf(cadenafecha.substring(3,5)).intValue();
- any3 = Integer.valueOf(cadenafecha.substring(6)).intValue();
- }
- longfecha = fecha1.length();
- if (longfecha != 10)
- {
- System.out.print(" Una fecha no tiene longitud 10.");
- }
- else
- {
- b1 = fecha1.charAt(2); //Caracteres de separaci—n
- b2 = fecha1.charAt(5);
- if ((b1 != '/') || (b2 != '/'))
- {
- System.out.print("Alguna fecha no tiene un formato dd/mm/aaaa");
- }
- else
- {
- d1 = fecha1.charAt(0);
- d2 = fecha1.charAt(1);
- b1 = fecha1.charAt(2);
- m1 = fecha1.charAt(3);
- m2 = fecha1.charAt(4);
- a1 = fecha1.charAt(6);
- a2 = fecha1.charAt(7);
- a3 = fecha1.charAt(8);
- a4 = fecha1.charAt(9);
- error1 = ((numeros.indexOf(d1) < 0) || (numeros.indexOf(d2) < 0) ||
- (numeros.indexOf(m1) < 0) || (numeros.indexOf(m2) < 0) ||
- (numeros.indexOf(a1) < 0) || (numeros.indexOf(a2) < 0) ||
- (numeros.indexOf(a3) < 0) || (numeros.indexOf(a4) < 0));
- if (error1)
- System.out.print("Error! Alguna fecha no es v‡lida");
- else
- {
- dia1 = Integer.valueOf(fecha1.substring(0,2)).intValue();
- mes1 = Integer.valueOf(fecha1.substring(3,5)).intValue();
- any1 = Integer.valueOf(fecha1.substring(6)).intValue();
- if ((sel == 2 & (dia1 <= 31 & mes1 <= 12)) | (sel == 1 & (dia2 <= 31 & mes2 <= 12 & dia1 <= 31 &mes1 <= 12))) {
- System.out.println( "La fecha de nacimiento es: " + dia1 + "/" + mes1 + "/" + any1 );
- if (sel == 1) {
- System.out.println( "La fecha acutal es: " + dia2 + "/" + mes2 + "/" + any2 );
- }
- if (sel == 2){
- System.out.println( "La fecha actual es: " + cadenafecha );
- }
- if (sel == 1){
- if ((any2 - any1) > 0) {
- calc = any2 - any1;
- System.out.println( "La edad calculada es de: " + calc + " a–o/s");
- }
- else {
- if ((any2 - any1) == 0) {
- calc2 = mes2 - mes1;
- System.out.println( "La edad calculada es de: " + calc2 + " mes/es");
- }
- else {
- System.out.println( "La fecha de nacimiento corresponde al futuro" );
- }
- }
- }
- if (sel == 2){
- if ((any3 - any1) > 0) {
- calc = any3 - any1;
- System.out.println( "La edad calculada es de: " + calc + " a–o/s");
- }
- else {
- if ((any3 - any1) == 0) {
- calc3 = mes3 - mes1;
- System.out.println( "La edad calculada es de: " + calc3 + " mes/es");
- }
- else {
- System.out.println( "La fecha de nacimiento corresponde al futuro" );
- }
- }
- }
- }
- else {
- System.out.println( "Alguna fecha introducida no se pasa de dia o mes" );
- }
- }
- }
- }
- }
- }