C#, Python, Web開発

プログラミングやデータ分析のことなどを書いています。

C# 文字列をDateTimeに変換(年月日)

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個にしたいと思いました。