アプリケーション全体のデフォルトのDateTime形式を設定またはオーバーライドする方法はありますか。私はC#.Net MVC 1.0でアプリを作成しており、多くのジェネリックとリフレクションを使用しています。デフォルトのDateTime.ToString()形式を「dd-MMM-yyyy」にオーバーライドできると、はるかに簡単になります。サイトが別のマシンで実行されているときに、この形式を変更したくない。
編集-明確にするために、他の拡張機能ではなく、具体的にToStringを呼び出すことを意味します。これは、リフレクション/生成されたコードが原因です。 ToString出力を変更する方が簡単でしょう。
日時の「デフォルト形式」は次のとおりです。
ShortDatePattern + ' ' + LongTimePattern
少なくとも現在の mono implementation では。 2001-02-03T04:05:06Zのようなもの、つまり ISO 8606 で指定されているように結合された日付と時刻を表示したい場合、これは特に痛いですが、あなたの場合には大きな問題ではありません:
using System;
using System.Globalization;
using System.Threading;
namespace test {
public static class Program {
public static void Main() {
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
culture.DateTimeFormat.LongTimePattern = "";
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(DateTime.Now);
}
}
}
これにより、日付時刻のToStringのデフォルトの動作が設定され、期待する形式が返されます。
アプリケーションのローカライズ設定に依存します。 それに応じて変更 正しい形式を取得します。
それ以外の場合は、常にDateTimeを処理するヘルパークラスまたは拡張メソッドがあります。
public static string ToMyDateTime(this DateTime dateTime) {
return dateTime.ToString("dd-MMMM-yy");
}
DateTime.ToString() は、 DateTimeFormatInfo のShortDatePatternプロパティとLongTimePatternプロパティによって返されるカスタム形式の文字列を組み合わせたものです。これらのパターンは DateTimeFormatInfo.CurrentInfo で指定できます。
これを自分で試したことはありません。
文化が変わらないようにしたい場合は、トラブルを避けるために自分で設定してください。
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("nl-BE");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
上記の例では、スレッドのカルチャをBelgian-Dutchに設定しています。
CurrentCultureはすべての日付と時刻の処理を行い、CurrentUICultureはリソースのようなUIローカリゼーションを処理します。