Windows10でも「令和」に変換できたが「元年」表記なんだ、、、

新元号対応のアップデートを待っているのだが、Windows10の最新版用のが出ないので、仕方なくWindows10の1709バージョンの仮想PCを作って試したところ、5月1日が「令和」に変換できた。

前の記事で使った西暦を和暦に変換するアプリを動かしたところ、2019年5月1日が令和1年5月1日に変換できた!




しかし、「令和1年」ではなく「令和元年」に変換されている!デフォルトが元年に変換されるのか。

そして「令和元年」は西暦に変換できない。これはまずいのでは?



和暦から西暦に変換するのに、Datetime.TryParseメソッドを使っていたのだが、日本語のCultureInfo を指定しないと「元年」は変換できないらしい。
var ci = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
            if (DateTime.TryParse(s, ci, DateTimeStyles.AssumeLocal, out DateTime dd))
            {
                lb.Text = dd.ToShortDateString();
            }


「令和元年」ではなく「令和1年」ならCultureInfoを指定しなくても変換できる。和暦なのにCultureInfoを指定せずに変換できるのも不思議と云うか、中途半端というか、よくわからない。

変換できる和暦のテキストは試した限りでは以下の通り。

CultureInfo無しでもOK
  • 令和1年5月5日
  • 令和1-5-5
  • 令和1/5/5
  • R1.5.5
  • R1/5/5
  • R1-5-5
  • R1 5 5
CultureInfoが必要
  • 令和元年5月5日
  • 令和元-5-5
  • 令和元/5/5
  • R元.5.5
  • R元/5/5
  • R元-5-5
  • R元 5 5
「元年」を無視してもOKなら、CultureInfoなしのTryParseで変換できてお手軽なのだけど、今後は「元年」が含まれる可能性があるわけで、和暦から西暦に変換するときにはCultureInfoを指定した方がよい、というか指定しなければならない、なかなか面倒だね。

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。