[C#]カルチャ(ロケール)を指定した日付のフォーマット


DateTime.ToString()の書式指定とカルチャ(ロケール)を指定した書式変換の仕方について記述します



以下の様に日付をフォーマットすると、曜日の部分が日本語で表示されます

var dt = new DateTime(2015,3,27,13,20,40);
var result = dt.ToString(@"yyyy/MM/dd HH:mm:ss ddd");

result変数の中身
→ 2015/03/27 13:20:40 金

これはカルチャ(ロケール)が日本語(jp-JP)に指定されている為です。
上記コードは

var result = dt.ToString(@"yyyy/MM/dd HH:mm:ss ddd", System.Globalization.CultureInfo.CurrentCulture);

と、「CultureInfo.CurrentCulture」を指定しているのと同じになります。

曜日を英語表記にしたい

“金”とか”土”とかではなく、”Fri”,”Sat”とかに変換したい場合は、カルチャ(ロケール)にEnglish(United State)を指定します。
English(United State)のカルチャ名は「en-US」です。
DateTime#ToStringの二番目の引数にカルチャを渡せますので、この引数にen-USなCultureを指定します。
なお、こういったカルチャ名はNational Language Support (NLS) API Reference (各国語サポート (NLS: National Language Support) API のリファレンス)に表で記載されています。

では、英語で出力してみます

var dt = new DateTime(2015,3,27,13,20,40);
var culture = new System.Globalization.CultureInfo("en-US");
var result = dt.ToString(@"yyyy/MM/dd HH:mm:ss ddd", culture);

result変数の中身
→ 2015/03/27 13:20:40 Fri

曜日の部分が「Fri」となりました。

var culture = new System.Globalization.CultureInfo("en-US");

でen-USなCUltureのインスタンスを生成し、DateTime.ToStringメソッドの引数に指定しています。

カルチャ(ロケール)に依存する書式指定子

以下が、カルチャ(ロケール)に依存する書式指定子の一部です。

書式指定子 内容 例(ja) 例(en)
ddd 曜日の省略名 Fri
dddd 曜日の完全名 金曜日 Friday
MMM 月の省略名 3 Mar
MMMM 月の完全名 3月 March
tt 午前午後 午後 PM
gg 年号 西暦 A.D.

他にもいくつかありますが、まぁこんなことろです