2011-08-14 56 views
3

在我的ASP.NET MVC項目的global.asax.cs的的Application_BeginRequest()方法有代碼:不同DateTimeFormat用於開發和測試環境

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(EnCultureKey); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(EnCultureKey); 
Thread.CurrentThread.CurrentCulture.DateTimeFormat = new CultureInfo(EnGBCultureKey).DateTimeFormat; 

的變量是

private const string EnCultureKey = "en-US"; 
private const string EnGBCultureKey = "en-GB"; 

在開發環境中,所有的日期都是DD/MM/YYYY格式,但在測試環境中,它們是MM/DD/YYYY格式。

請問可以爲什麼會導致這種差異?

UPDATE:

請看看Setting Culture for ASP.NET MVC application on VS dev server and IIS

+0

你是如何格式化DateTime是否? – Oded

+0

您是否嘗試將UICulture設置爲en-GB。它是否以正確的方式進行格式化?如果是這樣,你可以改變第三行來使用其他文化。注意:你在做奇怪的事情!首先你分配一種文化,然後你重寫它的行爲。對我來說沒有多大意義! – sprinter252

回答

4

(而不是給用戶選擇),則標準方式是a settingweb.config

<globalization uiCulture="en" culture="en-GB" /> 

的MSDN網頁也指向你重寫InitializeCulture(),如果你想使用的代碼。

InitializeCulture()發生得很早,但我懷疑Application_BeginRequest發生得更早,並且其效果被覆蓋。

+0

tnx尋求建議。我已經使用了後來的事件,它工作。 – dygo

0

使用在Global.asax中的 Application_Start方法的代碼嘗試,這將確保每次啓動應用程序時,文化信息設置爲您的規格。

確保您使用的是正確格式的時間,例如,顯示日期:如果您要覆蓋所有網頁這些設置

DateTime dt = DateTime.Now; Console.WriteLine(dt.ToString("d"));

+0

1.我將嘗試Application_Start,但Application_BeginRequest也必須足夠。 2.我沒有格式化我的DateTime。我認爲它默認使用G - 一般格式模式。 – dygo

+0

應用程序啓動只發生一次。你必須按照要求做這件事。 –

0

啊我明白了,對不起。

我認爲這是因爲當然這樣你就改變了單一線程的文化,而不是應用程序的所有線程。

將您的代碼放在由應用程序中每個線程執行的位置,例如頁面加載。

+0

我正試圖在開發和測試環境中使用相同的日期時間格式。問題是爲什麼相同的代碼導致不同的行爲。 – dygo

0

好吧,我其實沒有查找IIS設置是負責任的,但我已經在Application_PreRequestHandlerExecute()覆蓋它,它終於摸索:

var culture = CultureInfo.CreateSpecificCulture(EnCultureKey); 
culture.DateTimeFormat = CultureInfo.CreateSpecificCulture(EnGBCultureKey).DateTimeFormat; 
Thread.CurrentThread.CurrentCulture = culture; 

culture = new CultureInfo(EnCultureKey); 
culture.DateTimeFormat = Thread.CurrentThread.CurrentCulture.DateTimeFormat; 
Thread.CurrentThread.CurrentUICulture = culture; 
相關問題