C# で日付をフォーマットされた文字列に変換する
日付をフォーマットされた文字列に変換する
DateTime 型の値をフォーマットされた文字列に変換したい時、よくありますよね。
ここでは、日付を文字列に変化する際に良く使うフォーマットの例を書いておこうと思います。
DateTime.ToString([フォーマット文字列])で変換
DateTime.ToString() メソッドにフォーマット文字列を渡して、文字列に変換します。
DateTime d = DateTime.ParseExact("2019-02-01 20:05:06.401", "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); Debug.WriteLine(d.ToString("yyyy-MM-dd HH:mm:ss.fff")); // 2019-02-01 20:05:06.401 Debug.WriteLine(d.ToString("yyyy/MM/dd HH:mm:ss")); // 2019/02/01 20:05:06 Debug.WriteLine(d.ToString("yyyy/M/d HH:mm:ss")); // 2019/2/1 20:05:06 Debug.WriteLine(d.ToString("yy/M/d HH:mm:ss")); // 19/2/1 20:05:06 Debug.WriteLine(d.ToString("yyyyMMddHHmmss")); // 20190201200506 Debug.WriteLine(d.ToString("MM/dd/yyyy HH:mm:ss")); // 02/01/2019 20:05:06
同じフォーマット文字列を渡しても、カルチャーによって変換後の文字列が変わってくる場合があります。
例えば、CultureInfo.CurrentCulture が日本 (ja-JP)の場合と、アメリカ (en-US)の場合では次のように違います。
DateTime d = DateTime.ParseExact("2019-02-01 20:05:06.401", "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); // CurrentCulture を日本 (ja-JP) に設定する CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("ja-JP"); Debug.WriteLine(d.ToString("----- ja-JP -----")); Debug.WriteLine(d.ToString("d")); // 2019/02/01 Debug.WriteLine(d.ToString("G")); // 2019/02/01 20:05:06 Debug.WriteLine(d.ToString("yyyy/MM/dd hh:mm:ss tt")); // 2019/02/01 08:05:06 午後 Debug.WriteLine(d.ToString("MMM")); // 2 Debug.WriteLine(d.ToString("MMMM")); // 2月 Debug.WriteLine(d.ToString("ddd")); // 金 Debug.WriteLine(d.ToString("dddd")); // 金曜日 // CurrentCulture をアメリカ (en-US) に設定する CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Debug.WriteLine(d.ToString("----- en-US -----")); Debug.WriteLine(d.ToString("d")); // 2/1/2019 Debug.WriteLine(d.ToString("G")); // 2/1/2019 8:05:06 PM Debug.WriteLine(d.ToString("MM/dd/yyyy hh:mm:ss tt")); // 02/01/2019 08:05:06 PM Debug.WriteLine(d.ToString("MMM")); // Feb Debug.WriteLine(d.ToString("MMMM")); // February Debug.WriteLine(d.ToString("ddd")); // Fri Debug.WriteLine(d.ToString("dddd")); // Friday
最後にカルチャーを指定して変換したい場合は次のように指定できます。
この例では、ドイツ(de-DE)の CultureInfoを生成して、第二引数として DateTime.ToString() メソッドに渡しています。
DateTime d = DateTime.ParseExact("2019-02-01 20:05:06.401", "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); // カルチャーを指定して変換する Debug.WriteLine(d.ToString("G", CultureInfo.CreateSpecificCulture("de-DE"))); // 01.02.2019 20:05:06