atsukanrockのブログ

Microsoft系技術を中心にぼちぼち更新します

DateTime.ParseExactメソッドで、1900年代の日時に変換される

.NETで文字列を日時の値に変換するには、DateTime.ParseExactメソッドを使用するのが普通だ。このメソッドは、第2引数に日付と時刻の書式指定文字列を指定する。その指定をカスタム DateTime 書式指定文字列とした場合、注意が必要だ。
年の解析でyy(年の下2桁)を指定した場合、29までの値は2000年代に、30以降の値は1900年代に変換されるのだ。つまり、以下のサンプルのとおりの動作となる。これは、コードを実行中のマシンのシステム日時などには依存しない(ようだ)。

// 以下は、"2029/01/01"と出力
Console.WriteLine(DateTime.ParseExact("29/01/01", "yy/MM/dd", null).ToString("yyyy/MM/dd"));

// 以下は、"1930/01/01"と出力
Console.WriteLine(DateTime.ParseExact("30/01/01", "yy/MM/dd", null).ToString("yyyy/MM/dd"));