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?

Foi útil?

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

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top