ASP.NET アプリケーションでは、カルチャを lv-LV に設定しています。すべて問題ありませんが、デフォルトの短い日付形式は「yyyy.mm.dd」のようです。クライアントは、それを「dd.mm.yyyy」(実際には LV 標準) にしたいと考えています。ASP.NET は特定のカルチャの日付/時刻設定をどこで取得しますか? 他のカルチャに影響を与えることなく、単一のカルチャに対してどのように変更できますか (アプリケーションはローカライズ可能である必要があります)。
2 に答える
私はかつて同様の問題を抱えていて、次の方法で解決しました。
DateTimeFormatInfo dtfi = (DateTimeFormatInfo)Thread.CurrentThread.CurrentCulture.DateTimeFormat.Clone();
dtfi.ShortDatePattern = "dd.MM.yyyy";
dtfi.DateSeparator = ".";
Thread.CurrentThread.CurrentCulture.DateTimeFormat = dtfi ;
Thread.CurrentThread.CurrentUICulture.DateTimeFormat = dtfi;
そうすれば、日付形式以外のすべての地域設定を維持できます。
このコードは、Page 基本クラスの OnLoad で実際に実行されました。それが最善の方法かどうかはわかりません。
.Net は、DateTimeFormatInfo クラスから特定のカルチャの日付/時刻設定を取得します。変更した DateTimeFormatInfo を使用して、CultureInfo の DateTimeFormat プロパティを設定できます。そのカルチャが現在のカルチャである場合は、CurrentCulture で設定できます。いずれにせよ、これは作成した CultureInfo にのみ影響し、他のカルチャには影響しません。(CultureInfo.GetCultureInfo("lv-LV") を呼び出しても、読み取り専用のコピーであるため、これらの変更は取得されません。)必ずしも CultureInfo を DateTime 書式設定メソッド (ToString、ParseExact) に渡す必要はありません。 ) - 明示的なパターンまたは DateTimeFormatInfo を渡すことができます。
CultureInfo lvLV = new CultureInfo("lv-LV");
DateTimeFormatInfo lvLVdtfi = (DateTimeFormatInfo) lvLV.DateTimeFormat.Clone();
lvLVdtfi.ShortDatePattern = "dd.MM.yyyy";
lvLV.DateTimeFormat = lvLVdtfi;
DateTime.Now.ToString("d", lvLV); // short date pattern from modified lv-LV CultureInfo
DateTime.Now.ToString("d", lvLVdtfi); // short date pattern from modified DateTimeFormatInfo
DateTime.Now.ToString("dd.MM.yyyy"); // explicit short date pattern
lv-LV が現在の Windows カルチャである場合は、ユーザー オーバーライドを設定できます (地域と言語のオプション コントロール パネルの intl.cpl を使用して形式をカスタマイズします)。フレームワークはこれを取得します。