método preferido para o tratamento de conversões de data Y2K?
-
20-08-2019 - |
Pergunta
Existe um algoritmo preferido para a conversão de um ano de 2 dígitos em um ano de 4 dígitos?
Eu tenho uma data de nascimento de 2 dígitos (junto com mês e dia) que eu quero converter para um C # DateTime
. Obiviously, datas de nascimento não pode ser no futuro, mas existe uma instalação existente em .NET para converter um ano de 2 dígitos para um ano de quatro dígitos?
Solução
static int GetFourDigitYear(int year, int maxYear)
{
System.Globalization.GregorianCalendar cal =
new System.Globalization.GregorianCalendar();
cal.TwoDigitYearMax = maxYear;
return cal.ToFourDigitYear(year);
}
maxYear
deve ser o corrente ano de quatro dígitos.
Editar : A solução da 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);
}
Outras dicas
Vários sistemas usam diferentes datas de ponto de interrupção, dependendo de suas necessidades de dados subjacentes.
No seu caso, o mais provável é seguro assumir que os anos 00 a 09 são 2000+ Considerando que quaisquer outros valores (10 a 99) são 1.900 +
A pergunta que você tem que se perguntar é:. O que é a probabilidade de ter mais de 100 anos as pessoas velhas como registros atualmente em seu sistema
Você deve fazer este cálculo exatamente uma vez, armazená-lo, e ter todo o seu código vai para a frente com 4 anos de dígitos.
que me ocorreria que se uma pessoa foi potentiall nascido 03 de janeiro de 2007 que a probabilidade de que eles nasceram no mesmo dia da semana 100 anos antes é ligeiramente menor do que 1/7. Se essa probabilidade é alta demais para o seu gosto, então eu duvido que há uma boa maneira de automatizar isso a menos que você também armazenar sua idade.
edit: é claro, não há uma fórmula (sabendo através de algoritmos como funciona o calendário) que irá reduzir esta probabilidade ... mas no final, você ainda é provável que tenha alguns resultados errantes se você não armazenar suas idade.
Editar 2: claro, se você tiver sua idade, então você não precisa de um algoritmo de calendário
.