Java - Métodos calcular edad y días cumpleaños

 
Vista:
Imágen de perfil de Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Métodos calcular edad y días cumpleaños

Publicado por Lucas (4 intervenciones) el 11/05/2020 12:00:20
Buenos días, estoy intentando realizar un método que me calcule la edad de un usuario a partir de su fecha de nacimiento. Este valor que debo obtener lo debo mostrar en una tabla por consola, pero siempre me da un valor null.



Tengo una clase llamada Trabajador que tan solo debe contener lo siguiente:
Atributos:
Nombre, apellidos, email de tipo String
Fecha de nacimiento de tipo Calendar.

Métodos:
Calcular edad
Calcular días restantes hasta su próximo cumpleaños.

En la clase main llamada Empresa se debe preguntar nombre, apellidos y la fecha de nacimiento al nuevo trabajador, calcularle la edad y los días restantes hasta su próximo cumpleaños.

Les muestro mi progreso del código por si me pueden echar una mano.. Muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/* Clase Trabajador */
public class Trabajador {
 
	// Atributos
	private String nombre;
	private String apellidos;
	private String email;
	private Calendar fechaNacimiento;
 
 
	// Constructora/s de la clase
	public Trabajador(String nombre, String apellidos, String email, Calendar fechaNacimiento) {
		this.nombre = nombre;
		this.apellidos = apellidos;
		this.email = email;
	    this.fechaNacimiento = fechaNacimiento;
		}
 
    }
	// Getters & setters
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public String getApellidos() {
		return apellidos;
	}
 
	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
 
	public String getEmail() {
		return email;
	}
 
	public void setEmail(String email) {
		this.email = email;
	}
 
	public EstadoCivil getEstadoCivil() {
		return estadoCivil;
 
 
	public Calendar getFechaNacimiento() {
		return fechaNacimiento;
	}
 
	public void setFechaNacimiento(Calendar fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
 
	// Metodos
	@Override
	public String toString() {
    String str = "";
    str += "Trabajador [" + ", nombre=" + nombre + ", apellidos=" + apellidos;
    str += ", fechaNacimiento=" + fechaNacimiento + ", email=" + email + "'";
 
    return str;
	}
 
    public int edad() {
		Calendar ahora = new GregorianCalendar();
		if (ahora.get(Calendar.YEAR) >= ( fechaNacimiento ).get(Calendar.YEAR)) {
			 if (ahora.get(Calendar.MONTH) >= fechaNacimiento.get(Calendar.MONTH)) {
				return ahora.get(Calendar.YEAR) - (fechaNacimiento).get(Calendar.YEAR);
			}
			else
				return ahora.get(Calendar.YEAR) - (fechaNacimiento).get(Calendar.YEAR) - 1;
		}
		else
	return 0;
	}
 
	public int diasCumpleanos() {
		LocalDate today = LocalDate.now();
        LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
 
        LocalDate nextBDay = birthday.withYear(today.getYear());
 
        //If your birthday has occurred this year already, add 1 to the year.
        if (nextBDay.isBefore(today) || nextBDay.isEqual(today)) {
            nextBDay = nextBDay.plusYears(1);
        }
 
        Period p = Period.between(today, nextBDay);
        long p2 = ChronoUnit.DAYS.between(today, nextBDay);
        System.out.println();
	return 0;
    }
}
 
 
 
/* Clase Empresa */
 
public class Trabajadores implements Sistema {
 
	private ArrayList<Trabajador> listTrabajadores = new ArrayList<Trabajador>();
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
 
		/* Metodo para crear un nuevo trabajador */
		private Trabajador crearTrabajador() {
			Trabajador trabajador = null;
			try {
				System.out.println("Creando un nuevo trabajador.");
 
 
				String nombre = pedirCadena("Introduzca el NOMBRE:\n");
				String apellidos = pedirCadena("Introduzca los APELLIDOS:\n");
				String email = pedirCadena("Introduzca el EMAIL:\n");
 
 
				System.out.println("Introduzca la FECHA DE NACIMIENTO [formato DD/MM/YYYY]");
				Scanner scanner = new Scanner(System.in);
		        String input = scanner.nextLine();
		        scanner.close();
 
		        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		        Calendar fechaNacimiento = Calendar.getInstance();
		        fechaNacimiento.setTime(sdf.parse(input));
 
				trabajador = new Trabajador(crearIdentificador(), nombre, apellidos, email, fechaNacimiento);{
	        }
			}catch (Exception ExcepcionFechaNoValida) {
	        trabajador = null;
	        }
	        return trabajador;
	    }
 
		//* Metodo que muestra la lista de trabajadores
		private void listaTrabajadores() {
			if (listTrabajadores != null && !listTrabajadores.isEmpty()) {
 
				String[] cabeceras = new String[]{"NOMBRE", "APELLIDOS", "EMAIL",  "FECHA-NAC", "EDAD", "CUMPLEAÑOS"};
				System.out.println(":: Mostrando todos los trabajadors ...");
				DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
				Calendar cal = Calendar.getInstance();
				System.out.println(":: Instante actual: " + dateFormat.format(cal.getTime()));
				System.out.println("Numero total de trabajadors (" + listTrabajadores.size() + ")");
 
			System.out.format("%4s %14s %14s %8s %22s %15s \n", cabeceras[0], cabeceras[1], cabeceras[2], cabeceras[3], cabeceras[4], cabeceras[5]);
	            for (Trabajador e : listTrabajadores) {
	               LocalDate fechaNacimiento;
				LocalDate currentDate;
				System.out.format("%4s %10s %12s %20s %14s %10s \n",
				e.getIdentificadorFormateado(), e.getNombre(), e.getApellidos(), e.getEmail(), e.getFechaNacimiento(), e.diasCumpleanos());
				}
	            System.out.println("\n\n");
			}
 
		  }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Métodos calcular edad y días cumpleaños

Publicado por Rodrigo (623 intervenciones) el 11/05/2020 16:18:55
No parece haber evidencia que a lista de la clase trabajadores que se le agregue ningun trabajador.
Ademas el metodo para crear uno nuevo es private, por lo que solo podria crearse desde la misma clase, y no veo ninguna llamada al metodo crearTrabajador.

El codigo se ve mejor y es mas facil ayudar si lo encierras usando el icono </> que aparece cuando editas un mensaje.
El codigo aparece indentado, con numero de lineas, etc.
Por ejemplo asi:
1
2
3
if( variable > 0 ) {
   c++;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Métodos calcular edad y días cumpleaños

Publicado por Billy Joel (878 intervenciones) el 11/05/2020 16:39:23
He modificado la clase Trabajador para hacer los cálculos en el constructor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import java.util.Calendar;
import java.util.concurrent.TimeUnit;
 
public class Trabajador {
 
// Atributos
    private String nombre;
    private String apellidos;
    private String email;
    private Calendar fechaNacimiento;
    private int edad;
    private long diasProximoCumpleaños;
 
// Constructora/s de la clase
    public Trabajador(String nombre, String apellidos, String email, Calendar fechaNacimiento) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.fechaNacimiento = fechaNacimiento;
        //Calculamos la edad
        Calendar hoy = Calendar.getInstance();
        edad = hoy.get(Calendar.YEAR) - fechaNacimiento.get(Calendar.YEAR);
        /**
         * reutilizamos el objeto fechaNacimiento y le actualizamos el año al actual.
         * Verificamos si ya cumplió años, si es así entonces se agrega un año mas
         */
        fechaNacimiento.set(Calendar.YEAR, hoy.get(Calendar.YEAR));
        if (hoy.after(fechaNacimiento)) {
            fechaNacimiento.add(Calendar.YEAR, 1);
        }
        diasProximoCumpleaños = TimeUnit.DAYS.convert((fechaNacimiento.getTimeInMillis() - hoy.getTimeInMillis()), TimeUnit.MILLISECONDS);
    }
 
    public int getEdad() {
        return edad;
    }
 
    public long getDiasProximoCumpleaños(){
        return diasProximoCumpleaños;
    }
 
// Getters & setters
    public String getNombre() {
        return nombre;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public String getApellidos() {
        return apellidos;
    }
 
    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }
 
    public Calendar getFechaNacimiento() {
        return fechaNacimiento;
    }
 
    public void setFechaNacimiento(Calendar fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }
 
// Metodos
    @Override
    public String toString() {
        String str = "";
        str += "Trabajador [" + ", nombre=" + nombre + ", apellidos=" + apellidos;
        str += ", fechaNacimiento=" + fechaNacimiento + ", email=" + email + "'";
 
        return str;
    }
 
//    public int edad() {
//        Calendar ahora = new GregorianCalendar();
//        if (ahora.get(Calendar.YEAR) >= (fechaNacimiento).get(Calendar.YEAR)) {
//            if (ahora.get(Calendar.MONTH) >= fechaNacimiento.get(Calendar.MONTH)) {
//                return ahora.get(Calendar.YEAR) - (fechaNacimiento).get(Calendar.YEAR);
//            } else {
//                return ahora.get(Calendar.YEAR) - (fechaNacimiento).get(Calendar.YEAR) - 1;
//            }
//        } else {
//            return 0;
//        }
//    }
//
//    public int diasCumpleanos() {
//        LocalDate today = LocalDate.now();
//        LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
//
//        LocalDate nextBDay = birthday.withYear(today.getYear());
//
////If your birthday has occurred this year already, add 1 to the year.
//        if (nextBDay.isBefore(today) || nextBDay.isEqual(today)) {
//            nextBDay = nextBDay.plusYears(1);
//        }
//
//        Period p = Period.between(today, nextBDay);
//        long p2 = ChronoUnit.DAYS.between(today, nextBDay);
//        System.out.println();
//        return 0;
//    }
}

Para obtener la edad utilizas el método getEdad() y para obtener los días para el proximo cumpleaños utilizas getDiasProximoCumpleaños()

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Métodos calcular edad y días cumpleaños

Publicado por Lucas (4 intervenciones) el 11/05/2020 21:13:53
Muchas gracias por la ayuda,
ha sido vital para poder solucionar mi problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar