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

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



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


  1. List lst = new List()
  2. {
  3. "1970-07-07",
  4. "1970-7-7",
  5. "1970/07/07",
  6. "1970/7/7",
  7. "1970.07.07",
  8. "1970.7.7",
  9. "19700707",
  10. "700707",
  11. "昭和45年07月07日",
  12. "昭和45年7月7日",
  13. "S45年07月07日",
  14. "S45年7月7日",
  15. "S45-07-07",
  16. "S45-7-7",
  17. "S45/07/07",
  18. "S45/7/7",
  19. "S45.07.07",
  20. "S45.7.7",
  21. "S450707",
  22. "3450707",
  23. };
  24. foreach (string s in lst)
  25. {
  26. string t;
  27. DateTime dd;
  28. if ((DateTime.TryParse(s, out dd)))
  29. {
  30. t = dd.ToLongDateString();
  31. }
  32. else
  33. {
  34. t = "NG";
  35. }
  36. this.textBox1.Text += string.Format("{0} --> {1}" + Environment.NewLine, s, t);
  37. }


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

コメント

このブログの人気の投稿

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