LoginSignup
3
1

More than 3 years have passed since last update.

和暦の環境で西暦の日付の文字列をパースする/DateTime変数を西暦の文字列に変換する

Last updated at Posted at 2019-11-27

問題

Windowsのカレンダーを和暦にした状態でyyyy/MM/dd HH:mm:ss形式の西暦の文字列をDateTime.Parse()でパースすると、yyyyの部分が元号の年として認識されてしまいます。
また、DateTime型の変数を単純にToString()すると、和暦の文字列が得られてしまいます。

 var date = "2019/11/21 01:23:45";
 Console.WriteLine(DateTime.Parse(date)); //令和2019/11/21 1:23:45

 var date2 = DateTime.Parse("令和1/11/21 01:23:45");
 Console.WriteLine(date2.ToString("yyyy/MM/dd HH:mm:ss")); //01/11/21 01:23:45

解決方法

DateTime.Parse()およびToString()に特定のカルチャに依存しないカルチャ情報(CultureInfo.InvariantCulture)を指定してあげると、yyyyの部分を西暦として認識してくれます。

 var date = "2019/11/21 01:23:45";
 Console.WriteLine(
   DateTime.Parse(date, CultureInfo.InvariantCulture)
 ); //令和1/11/21 1:23:45

 var date2 = DateTime.Parse("令和1/11/21 01:23:45");
 Console.WriteLine(
   date2.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture)
 ); //2019/11/21 01:23:45
3
1
0

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
3
1