問題
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