2009-06-26 26 views
0

是否有將2位數年份轉換爲4位數年份的首選算法?處理Y2K日期轉換的首選方法?

我有一個2位數的出生日期(以及月和日),我想轉換爲C#DateTime。很明顯,生日不會在將來,但是.NET中是否有現成的工具將2位數的年份轉換爲4位數的年份?

+2

如果你沒有注意到,你大概晚了九年。 – 2009-06-26 17:22:08

+1

並非我需要與之交談的每個系統都符合Y2K標準。並不是每個系統都會符合Y2K標準。 – 2009-06-26 19:43:49

回答

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

maxYear應該是當前的四位數年份。


編輯: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); 
} 
+0

一個類似於這個的靜態函數最終成爲我的解決方案,除了我傳遞了一個關鍵點,而不是一年。出生日期的關鍵是100年前。 – 2009-06-26 21:16:46

1

各種系統使用取決於其基礎數據的要求不同斷點日期。

在你的情況,這是最有可能安全地假定年00至09是2000+,而任何其他值(10到99)是1900+

你要問自己的問題是:什麼是系統中目前有100多歲的人成爲記錄的可能性。

你應該只做一次這個計算,存儲它,並讓你的所有代碼繼續使用4位數的年份。

0

如果一個人在2007年1月3日出生,他們出生於100年前一週的同一天的可能性略低於1/7,那麼我就會想到這一點。如果這種可能性對於你的喜好來說太高,那麼我懷疑是否有一種很好的自動化方法,除非你也存儲它們的年齡。

編輯:當然,有一個公式(知道算法是如何工作的)如何降低這個概率......但最終,如果你沒有存儲,你仍然可能有一些錯誤的結果他們的年齡。

編輯2:當然,如果你有他們的年齡,那麼你不需要日曆算法。