2009-09-07 114 views
30

是否有一種方法可以設置或覆蓋整個應用程序的默認日期時間格式。我在C#.Net MVC 1.0中編寫了一個應用程序,並使用了很多泛型和反射。如果我可以重寫默認的DateTime.ToString()格式爲「dd-MMM-yyyy」,會更簡單。當網站在不同的計算機上運行時,我不希望更改此格式。設置默認日期時間格式c#

編輯 - 只是爲了澄清我的意思是專門調用ToString,而不是其他一些擴展函數,這是因爲反射/生成的代碼。更改ToString輸出會更容易。

回答

42

日期時間的 「缺省格式」 是:

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的默認行爲以返回您期望的格式。

+1

感謝您的回覆,這個代碼應該放在.Net MVC 1.0項目中,我已經在視圖中試過了,它可以工作,但不是在global.asax中 – 2009-09-07 13:15:43

+1

「在視圖中」 ?你在global.asax中做了什麼? – 2009-09-07 13:28:51

+1

如果我把 <%CultureInfo culture =(CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern =「dd-MMM-yyyy」; culture.DateTimeFormat。LongTimePattern =「」; Thread.CurrentThread.CurrentCulture = culture; %> 位於視圖的頂部,它正確地格式化頁面上的所有日期時間。但是,當我將該代碼放入global.asax的Application_Start中時,它不起作用。 我認爲這與IIS中的多線程請求有關。哪裏是最好的地方放這個代碼來影響我的整個網站。 – 2009-09-07 14:08:28

0

你可以寫一個ExtensionMethod這樣的:

public static string ToMyString(this DateTime dateTime) 
{ 
    return dateTime.ToString("needed format"); 
} 
6

這取決於你的應用程序的本地化設置。 Change that accordingly以獲得正確的格式。

否則有一個輔助類或擴展方法,它總是處理你的日期時間。

public static string ToMyDateTime(this DateTime dateTime) { 
    return dateTime.ToString("dd-MMMM-yy"); 
} 
0

我不知道這是否會爲一個web應用程序的工作,但你可以嘗試設置DateTimeFormat屬性爲當前文化。

檢查this和專門this

1

如果你想確保你的文化保持不變,只需自己設置,以避免麻煩。

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("nl-BE"); 
System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
System.Threading.Thread.CurrentThread.CurrentUICulture = ci; 

以上示例將線程的文化設置爲比利時 - 荷蘭語。

CurrentCulture執行所有日期和時間處理,CurrentUICulture處理像資源一樣的UI本地化。