C#で文字列をDateTimeに変換する方法を書いていきます。
コード例
DateTime.ParseExact とフォーマット文字列(y,M,d)を使って変換することができます。
var dStr1 = "2023-6-2"; var date1 = DateTime.ParseExact( dStr1, "yyyy-M-d", // yyyy-MM-ddだとエラー CultureInfo.InvariantCulture ); Console.WriteLine(date1.ToString("yyyy-MM-dd")); // Output: 2023-06-02 var dStr2 = "2023-08-04"; var date2 = DateTime.ParseExact( dStr2, "yyyy-M-d", CultureInfo.InvariantCulture ); Console.WriteLine(date2.ToString("yyyy-MM-dd")); // Output: 2023-08-04 var jpStr1 = "2023年6月2日"; var jpDate1 = DateTime.ParseExact( jpStr1, "yyyy年M月d日", // yyyy年MM月dd日だとエラー CultureInfo.InvariantCulture ); Console.WriteLine(jpDate1.ToString("yyyy-MM-dd")); // Output: 2023-06-02 var jpStr2 = "2023年08月04日"; var jpDate2 = DateTime.ParseExact( jpStr2, "yyyy年M月d日", CultureInfo.InvariantCulture ); Console.WriteLine(jpDate2.ToString("yyyy-MM-dd")); // Output: 2023-08-04
フォーマット文字列について
yyyy-MM-dd の場合、2023-6-2 を変換するとエラーになるようです。
yyyy-M-d だと、2023-6-2 や 2023-06-02 も変換できます。
日付の形式が曖昧な場合
文字列からDateTimeに変換する際は、以下のようなフォーマットを使うと良い気がしました。
- yyyy-M-d
- yyyy/M/d
- yyyy年M月d日
書き出す際は、yyyy-MM-dd といったように、数字8個にしたいと思いました。