2009-06-10 85 views
0

在ASP.NET應用程序中,我將文化設置爲lv-LV。一切都很好,但默認的短日期格式似乎是「yyyy.mm.dd」。客戶希望它是「dd.mm.yyyy」(這實際上是LV標準)。 ASP.NET如何獲取特定文化的日期/時間設置?他們如何改變單一文化,而不影響其他文化(應用程序應該是本地化的)?ASP.NET從哪裏獲取其文化設置?

回答

3

我曾經有一個類似的問題,並解決它:

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; 

這樣,你得到保持所有其他區域設置不同的日期格式。

該代碼實際上在我們的頁面基類中的OnLoad上運行。我不太確定這是最好的方法。

+0

這樣的事情也在我腦海中浮現。不過這似乎有點......錯了。 :D我不喜歡硬編碼。也許有一些系統註冊表鍵需要改變該文化或什麼的? – 2009-06-10 14:17:56

0

.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區域和語言選項控制面板和自定義格式)和框架會挑這件事。

相關問題