和暦日付で 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