4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】和暦西暦変換(2018/6/12時点)

Posted at

和暦変換にかかる問題

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

ちゃんと変換できるようだ。

4
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?