Domanda

Esiste un algoritmo preferito per convertire un anno a 2 cifre in un anno a 4 cifre?

Ho una data di nascita di 2 cifre (insieme a mese e giorno) che voglio convertire in C # DateTime. Obiviously, le date di nascita non possono essere in futuro, ma esiste una struttura esistente in .NET per convertire un anno a 2 cifre in un anno a quattro cifre?

È stato utile?

Soluzione

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

maxYear dovrebbe essere l'anno in corso a quattro cifre.


Modifica : soluzione 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);
}

Altri suggerimenti

Vari sistemi utilizzano date di breakpoint diverse a seconda dei requisiti dei dati sottostanti.

Nel tuo caso, è molto probabile presumere che gli anni da 00 a 09 siano 2000+, mentre qualsiasi altro valore (da 10 a 99) è 1900+

La domanda che ti devi porre è: qual è la probabilità di avere più di 100 anni come record attualmente nel tuo sistema.

Dovresti fare questo calcolo esattamente una volta, memorizzarlo e fare in modo che tutto il tuo codice vada avanti usando anni a 4 cifre.

Mi verrebbe in mente che se una persona fosse potenzialmente nata il 3 gennaio 2007, la probabilità che nascessero lo stesso giorno della settimana 100 anni prima è leggermente inferiore a 1/7. Se questa probabilità è troppo alta per i tuoi gusti, allora dubito che ci sia un buon modo per automatizzarla a meno che tu non memorizzi anche la loro età.

modifica: ovviamente, c'è una formula (sapendo algoritmicamente come funziona il calendario) che ridurrà questa probabilità ... ma alla fine, avrai comunque dei risultati errati se non memorizzi il loro età.

modifica 2: ovviamente, se hai la loro età, non hai bisogno di un algoritmo di calendario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top