web-dev-qa-db-ja.com

datetime.tostring月と日の言語

国籍の異なる人のメールアドレスのリストがあります(人ごとにISOコードがあります)

これらすべての人々に電子メールを送信するとき、メールのテキストで、日時フィールドを特定の文化でフォーマットされた文字列に変換する必要があります。

このために私はやっています

CultureInfo ci = new CultureInfo(ISO);
myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern);

完璧に動作しますが、「2010年6月13日月曜日」のような日付を表示するために、代わりにLongDatePatternを短く使用すると、日と月の言語を除いて正常に動作します。

人の文化がそれなら-IT私は「月曜日」と「6月」ではなく「マルテディ」と「ギグノ」を表示する必要があります

現在のUIカルチャを変更せずにそれを行うにはどうすればよいですか?

15
paolofabio

これらのパターンは、Datetimeの出力結果の年、月、日、およびその他のパラメーターlocationsを記述します。ただし、月と日の名前は、パターンではなく、CultureInfoオブジェクトから取得されます。フォーマットとともにCultureInfoパラメーターの受け渡しをサポートする DateTime.ToStringoverload があります

        CultureInfo culture = new CultureInfo(ISO); 
        DateTime.Now.ToString(culture.DateTimeFormat.LongDatePattern, culture);

このように、ToString()は、指定されたカルチャのパターンと名前の両方を尊重します

14
archil

フォーマットパターンのみを指定したため、他の設定はデフォルトのフォーマットから取得されます。また、フォーマットプロバイダーを指定する必要があります。

myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, ci);

または、長い日付パターンに標準のフォーマット文字列Dを使用します(指定したフォーマットプロバイダーから実際のパターンを取得するため)。

myStringDate = myDate.ToString("D", ci);

デモ:

CultureInfo ci = new CultureInfo("it-IT");
Console.WriteLine(DateTime.Now.ToString("D", ci));
ci = new CultureInfo("sv-SE");
Console.WriteLine(DateTime.Now.ToString("D", ci));

出力:

giovedì 26 gennaio 2012
den 26 januari 2012
8
Guffa

DateTimeFormatInfoクラスを使用します。

string code = "mk-MK";
DateTimeFormatInfo info =
    DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code));
string longDate = 
    DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code));
4

私はちょうど同様の問題を抱えていて、それを次のように解決しました:

DateTime.Now.ToString("dddd, dd MMMM yyyy", new System.Globalization.CultureInfo("it-IT"));

それはおかげでした このリンク。

4
Robert

DateTime.ToString()にはさらに別のオーバーロードがあり、必要なパターンの両方を指定できます(現在はおよび使用するカルチャです。試してみてください:

myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern,
                               ci);
2
AakashM