Metodo preferito per gestire le conversioni di date Y2K?
-
20-08-2019 - |
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?
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.