DateTimeのParseメソッドは和暦も変換できる

DateTimeのParseメソッド、あるいはTryParseメソッドを使うと、たとえば「1970/7/7」のような文字列をDateTimeオブジェクトに変換できる。

このメソッドは和暦の文字列が変換できて、なかなか優秀。和暦の略号の「S」も変換できる。とても優秀。


DateTimeのParseメソッドで変換できる文字列の書式を調べた結果をまとめる。

変換できる文字列

1970-07-07 --> 1970年7月7日
1970-7-7 --> 1970年7月7日
1970/07/07 --> 1970年7月7日
1970/7/7 --> 1970年7月7日
1970.07.07 --> 1970年7月7日
1970.7.7 --> 1970年7月7日
昭和45年07月07日 --> 1970年7月7日
昭和45年7月7日 --> 1970年7月7日
S45年07月07日 --> 1970年7月7日
S45年7月7日 --> 1970年7月7日
S45-07-07 --> 1970年7月7日
S45-7-7 --> 1970年7月7日
S45/07/07 --> 1970年7月7日
S45/7/7 --> 1970年7月7日
S45.07.07 --> 1970年7月7日
S45.7.7 --> 1970年7月7日

変換できない文字列

19700707 --> NG
700707 --> NG
S450707 --> NG
3450707 --> NG

年月日の区切りが無いとさすがに変換できないみたいですな。



テストに使ったコードは下記の通り。


List lst = new List()
            {
                "1970-07-07",
                "1970-7-7",
                "1970/07/07",
                "1970/7/7",
                "1970.07.07",
                "1970.7.7",
                "19700707",
                "700707",
                "昭和45年07月07日",
                "昭和45年7月7日",
                "S45年07月07日",
                "S45年7月7日",
                "S45-07-07",
                "S45-7-7",
                "S45/07/07",
                "S45/7/7",
                "S45.07.07",
                "S45.7.7",
                "S450707",
                "3450707",
            };

            foreach (string s in lst)
            {
                string t;
                DateTime dd;
                if ((DateTime.TryParse(s, out dd)))
                {
                    t = dd.ToLongDateString();
                }
                else
                {
                    t = "NG";
                }
                this.textBox1.Text += string.Format("{0} --> {1}" + Environment.NewLine, s, t);
                    
            }


今気がついたのだけど、「->」を貼り付けると「->」に自動的に変換されていた。これは賢い。前からそうだったけ?

コメント

このブログの人気の投稿

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