2009-06-26 5 views
0

2桁の年を4桁の年に変換するアルゴリズムがありますか?Y2Kの日付変換を処理するための好ましい方法は?

私はC#DateTimeに変換する2桁の生年月日(月と日とともに)を持っています。明らかに、誕生日は将来可能ではありませんが、.NETには2桁の年を4桁の年に変換する既存の機能がありますか?

+2

あなたが気づいていなかった場合、あなたは約9年遅れです。 –

+1

私が話さなければならないすべてのシステムがY2Kに準拠しているわけではありません。すべてのシステムがY2Kに準拠するとは限りません。 –

答えて

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

maxYearは現在の4桁の年である必要があります。


編集: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

このような静的関数は、1年ではなくピボットを渡すことを除いて、私の解決策になりました。生年月日は100年前です。 –

1

様々なシステムは、その基礎となるデータの要件に応じて、異なるブレークポイントの日付を使用しています。あなたのケースでは

、それが最も可能性の高い安全な任意の他の値(〜99 10)あなたは自問する必要があり、質問がある1900+

あるのに対し、年は09を通じて00 2000+であると仮定することです:何あなたのシステムに現在レコードとして100歳以上の人がいる可能性があります。

この計算を正確に1回実行して保存し、4桁の年を使用してすべてのコードを進めてください。

+0

補足として、このリンク(http://www.theiet.org/factfiles/it/dates.cfm?type=pdf)には、さまざまなシステムで問題を引き起こす可能性のある2001年から2100年の潜在的な日付のリストがあります。 – NotMe

0

私は、人が100年前の同じ日に生まれた可能性が1/7よりわずかに低いという可能性が2007年1月3日に生まれた場合、この確率があなたの好みに応じて高すぎる場合は、自分の年齢も保存しない限り、これを自動化する良い方法があるとは思えません。

編集:もちろん、この確率を下げる式があります(アルゴリズム的にカレンダーの仕組みを知っています)...しかし、最終的には、保存しないと誤った結果が出る可能性があります彼らの年齢。

編集2:もちろん、あなたの年齢があれば、カレンダーアルゴリズムは必要ありません。

関連する問題