雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

和暦日付で DateTime を初期化する

DateTime って Calendar を指定して初期化できたんですね。知りませんでした。

var cal = new JapaneseCalendar();
var date = new DateTime(22, 6, 2, cal);   // 平成 22 年(西暦 2010 年) 6 月 2 日
Console.WriteLine(date.ToString("yyyy/MM/dd"));
2010/06/02

ちなみに、現在以外の年号(和暦なら「昭和」とか)を指定したい場合は、カレンダークラス側から DateTime を取得する必要があります。

var cal = new JapaneseCalendar();
var date = cal.ToDateTime(20, 8, 15, 0, 0, 0, 0, 3);   // 昭和 20 年(西暦 1945 年) 8 月 15 日
Console.WriteLine(date2.ToString("yyyy/MM/dd"));
1945/08/15

もちろん、現在の年号の場合も、カレンダークラス側のメソッドで取得する事も可能です。

var cal = new JapaneseCalendar();
// GregorianCalendar とその派生クラスの場合、最後のパラメータに 0 を渡せば現在の年号と判定されるっぽい
var date = cal.ToDateTime(19, 8, 31, 0, 0, 0, 0, 0);   // 平成 19 年(西暦 2007 年) 8 月 31 日
Console.WriteLine(date2.ToString("yyyy/MM/dd"));
2007/08/31