2011-03-31 78 views
3

我在部署我的Web應用程序到不同服務器時出現問題。在一些DateTimeFormat模式中似乎存在不一致,如ShortDatePattern,使用相同的文化(pt-BR)。在我的開發機器(安裝了Windows 7,.NET 4,面向.NET 3.5的應用程序)和Windows Server 2008 R2(面向.NET 4的應用程序)服務器中,ShortDatePattern爲"dd/MM/yyyy" - 這是正確的,I猜測。不同的DateTimeFormat適用於不同機器中的相同文化

在生產服務器(Windows Server 2003,使用.NET 3.5)中,它是"d/M/yyyy"。這給我造成了很多麻煩。

我可以通過手工設置模式來解決問題,但是我真的很希望每次都需要輸出日期時避免這樣做。特別是因爲這在許多地方都是不平凡的(比如我使用MVC的Html.TextBoxFor),並且需要大量的重寫。

如果有一種方法可以在一個地方更改整個Web應用程序的模式,那就太棒了。我試着在Global.asax.cs文件下面的辦法,沒有成功:

CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); 
info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; 
System.Threading.Thread.CurrentThread.CurrentCulture = info; 

任何想法?

謝謝。

回答

2

其實,我試圖在Global.asax文件的錯誤位置使用上面的代碼。

我管理通過將代碼中的Application_BeginRequest方法來覆蓋整個aplication的ShortDatePattern:

protected void Application_BeginRequest() 
{ 
    CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); 
    info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; 
    System.Threading.Thread.CurrentThread.CurrentCulture = info; 
} 
0

在控制面板中轉到區域和語言選項,選擇格式化portuges(巴西),以定製此格式,檢查日期配置enter image description here

+2

雖然能解決它在我的機器上,我不能改變服務器上的格式。 – 2011-04-02 06:32:12

0

的解決方案是使用構造總是創建CultureInfo對象:

CultureInfo(string name, bool useUserOverride) 

和通過false獲取useUserOverride參數。

從MSDN:

useUserOverride:將表示是否使用用戶選擇的培養 設置(真)或默認的區域性設置(假)的布爾。

基本上使用假迫使CultureInfo使用默認設置(分隔符,...)從指定的文化,而不是使用系統中定義的文化。

還要考慮到不同的操作系統在某些(小)情況下可能產生不同的結果。 運行下面的代碼(.NET 4。5):

CultureInfo ci = new CultureInfo("it-IT", false); 

String date = DateTime.Now.ToString(ci); 
Console.WriteLine(date); 
Console.WriteLine("Time Separator: " + ci.DateTimeFormat.TimeSeparator); 
Console.WriteLine("Date Separaotr: " + ci.DateTimeFormat.DateSeparator); 
Console.ReadKey(); 

在Win 7產品:

29/10/2013 14:12:33 
Time Separator: : 
Date Separaotr:/

而在Win 8產品運行它:

29/10/2013 15.08.43 
Time Separator: . 
Date Separaotr:/
相關問題