Algoritmo para calcular la edad de una persona
Información
Programa en c para calcular la edad en años, meses y días
Cualquiera que se haya adentrado lo suficiente en la programación será dolorosamente consciente de las peculiaridades que conlleva cualquier asunto relacionado con la fecha y la hora. Como se quiere saber la edad exacta, tenemos que ser muy cuidadosos. En particular, tenemos que tener en cuenta todos los segundos bisiestos que se han producido en el marco temporal correspondiente.
Afortunadamente, ya que esto es un gran dolor, los científicos de la computación pronto llegaron a una solución para este problema: el tiempo Unix. El tiempo Unix es simplemente el número de segundos que han transcurrido desde las 00:00:00 del día 1970-01-01, el primero de enero de 1970 – incluyendo todos los segundos bisiestos.
La forma más sencilla de calcular la edad exacta de una persona es tomar la hora Unix actual y restarle la hora Unix de su nacimiento. Esto dará su edad en segundos, que ahora se puede convertir fácilmente a su formato de tiempo deseado. (Hay algunas complicaciones si la persona resulta haber nacido antes de 1970 – básicamente perdemos la pista de los segundos bisiestos).
Calcular la edad en años, meses y días en java
En primer lugar, ten en cuenta la suposición de que si, por ejemplo, naciste el 1 de febrero, el 1 de marzo siguiente tienes exactamente 1 mes de edad, aunque tu edad en días sea sólo 28, es decir, menos que la duración de un mes medio. Los años también tienen una longitud variable (debido a los años bisiestos), lo que significa que tu edad en tu cumpleaños no suele ser un número entero exacto de años. Si quieres expresar la cantidad exacta de tiempo que has vivido en años/meses/días, consulta mi otra respuesta. Pero lo más probable es que quieras falsear el número de años para que nacer el 1 de febrero signifique que cada 1 de febrero tienes X años, 0 meses y 0 días, y que el 1 de cualquier mes tengas X años, Y meses y 0 días.
Dada una fecha de nacimiento, (y,m,d), la fecha actual, (ynow,mnow,dnow), y una función tm() que da el tiempo unix/epoch para una fecha dada, lo siguiente dará como resultado una lista de 3 elementos que da la edad como {años, meses, días}:
Otros aquí tienen la idea correcta – simplemente necesitas ser capaz de extenderlo a otros lenguajes. Muchos sistemas informáticos cuentan el tiempo en segundos desde un punto específico (la «época» o «fecha de referencia») y calculan la fecha a partir de ahí, además de ofrecer métodos para convertir de segundos a fechas. Deberías poder obtener la hora actual en segundos, convertir la fecha de nacimiento en segundos desde la época, restar los dos valores y dividirlos por el número de segundos de un día:
Algoritmo de la calculadora de edad
Tenga en cuenta que la expresión LocalDate.now() está implícitamente relacionada con la zona horaria del sistema (algo que a menudo los usuarios pasan por alto). Para mayor claridad, generalmente es mejor utilizar el método sobrecargado now(ZoneId.of(«Europe/Paris»)) especificando una zona horaria explícita (aquí «Europe/Paris» como ejemplo). Si se solicita la zona horaria del sistema, mi preferencia personal es escribir LocalDate.now(ZoneId.systemDefault()) para que la relación con la zona horaria del sistema sea más clara. Esto supone un mayor esfuerzo de escritura pero facilita la lectura.
Considero esto como un pequeño error, pero el equipo de Joda tiene una opinión diferente sobre este extraño comportamiento y no quiere arreglarlo (extraño porque el día del mes de la fecha final es menor que el de la fecha inicial, por lo que el año debería ser uno menos). Véase también esta cuestión cerrada.
Para comparar vea las otras respuestas. Yo no recomendaría usar estas clases anticuadas en absoluto porque el código resultante sigue siendo propenso a errores en algunos casos exóticos y/o demasiado complejo teniendo en cuenta el hecho de que la pregunta original suena tan simple. En el año 2015 tenemos bibliotecas realmente mejores.
Pseudocódigo para calcular la edad
Para este problema en particular, eso significa en un nivel alto, «restar la fecha de nacimiento de la fecha actual». Para esta sustracción, se utiliza una variación del mismo algoritmo que se aprende para la sustracción en la escuela primaria – donde se empieza por restar la columna de menor valor (en este caso, «días»), tomando prestado de la siguiente columna de mayor valor si es necesario. Por ejemplo, para restar 1986-09-15 de 2010-04-10, se haría:
10 es menos que 15, por lo que hay que tomar prestado de la columna de los meses. Esto significa que la columna de los meses baja en uno (a 3), y la columna de los días sube en el número de días del mes 3 (marzo – entonces 31). Ahora puedes hacer la resta de la columna de los días:
Ahora podemos pasar a la columna de los meses. 3 es menos que 9, así que tenemos que volver a tomar prestado, esta vez el año. Quita uno del año, y añade 12 al mes (ya que siempre hay 12 meses en un año), luego realiza la resta:
Ahora puedes trabajar para convertir esto en un programa (pista: utiliza tres variables enteras separadas para los años, los meses y los días). La parte más complicada es el préstamo de la columna de los meses: necesitas saber cuántos días tiene ese mes, incluyendo los años bisiestos de febrero.