和暦変換にかかる問題
2019年5月1日から新元号になるということで。
でも、新元号が何?ということは決まってません。発表もいつになるのかが流動的。
和暦西暦変換をしているところは結構切実ですよね。
.NET Frameworkのカレンダー
平成が2019年4月30日まで、というのは決定事項なので、
じゃあ、JapaneseCalendarってどうなってるの?ということで、境界値周辺を確認。
確認用コード
System.Globalization.CultureInfo ci =
new System.Globalization.CultureInfo("ja-JP", false);
ci.DateTimeFormat.Calendar = new System.Globalization.JapaneseCalendar();
DateTime date = new DateTime(2019, 4, 29);
for (int i = 0; i <= 3; i++)
{
var date1 = date.AddDays(i);
var datestr = date1.ToString("gy年MM月dd日", ci);
var date2 = DateTime.ParseExact(datestr, "gy年MM月dd日", ci);
Console.WriteLine($"西暦={date1.ToString("yyyy/MM/dd")},和暦={datestr},逆変換={date2.ToString("yyyy/MM/dd")}");
}
出力結果
西暦=2019/04/29,和暦=平成31年04月29日,逆変換=2019/04/29
西暦=2019/04/30,和暦=平成31年04月30日,逆変換=2019/04/30
西暦=2019/05/01,和暦=??1年05月01日,逆変換=2019/05/01
西暦=2019/05/02,和暦=??1年05月02日,逆変換=2019/05/02
新元号は「??1年」って変換された。
で、「??1年」を西暦に戻すと「2019」に戻った。
決まったら、WindowsUpdateで新しい元号になってくれるっぽいね。
おまけ
2019年5月1日以降も平成表記されるものもあるので、その和暦が西暦変換できるの?ということで確認。
運転免許証とか、平成33年まで有効、とかあるし。
確認用コード
System.Globalization.CultureInfo ci =
new System.Globalization.CultureInfo("ja-JP", false);
ci.DateTimeFormat.Calendar = new System.Globalization.JapaneseCalendar();
var s = "平成31年05月01日";
var date3 = DateTime.ParseExact(s, "gy年MM月dd日", ci);
Console.WriteLine($"和暦 {s} -> 西暦={date3.ToString("yyyy/MM/dd")}");
出力結果
和暦 平成31年05月01日 -> 西暦=2019/05/01
ちゃんと変換できるようだ。