Pregunta

¿Existe un algoritmo preferido para convertir un año de 2 dígitos en un año de 4 dígitos?

Tengo una fecha de nacimiento de 2 dígitos (junto con mes y día) que quiero convertir a C # DateTime. Obviamente, las fechas de nacimiento no pueden ser en el futuro, pero ¿hay alguna instalación existente en .NET para convertir un año de 2 dígitos en un año de cuatro dígitos?

¿Fue útil?

Solución

static int GetFourDigitYear(int year, int maxYear) 
{
    System.Globalization.GregorianCalendar cal = 
          new System.Globalization.GregorianCalendar();
    cal.TwoDigitYearMax = maxYear;
    return cal.ToFourDigitYear(year);
}

maxYear debería ser el año actual de cuatro dígitos.


Editar : la solución de OP:

static int GetFourDigitYear(int year, int pivot) 
{
    System.Globalization.GregorianCalendar cal = 
          new System.Globalization.GregorianCalendar();
    cal.TwoDigitYearMax = new DateTime.Year + (100-pivot);
    return cal.ToFourDigitYear(year);
}

Otros consejos

Varios sistemas usan fechas de punto de corte diferentes según sus requisitos de datos subyacentes.

En su caso, lo más seguro es asumir que los años 00 a 09 son 2000+ mientras que cualquier otro valor (10 a 99) son 1900+

La pregunta que debe hacerse es: ¿cuál es la probabilidad de tener personas de más de 100 años como registros actualmente en su sistema?

Debe hacer este cálculo exactamente una vez, almacenarlo y tener todo su código en el futuro usando años de 4 dígitos.

se me ocurriría que si una persona naciera potencialmente el 3 de enero de 2007, la probabilidad de que naciera el mismo día de la semana 100 años antes es un poco menos de 1/7. Si esta probabilidad es demasiado alta para su gusto, entonces dudo que haya una buena manera de automatizar esto a menos que también almacene su edad.

editar: por supuesto, hay una fórmula (saber algorítmicamente cómo funciona el calendario) que reducirá esta probabilidad ... pero al final, es probable que tenga algunos resultados errantes si no almacena su edad.

edit 2: por supuesto, si tienes su edad, entonces no necesitas un algoritmo de calendario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top