2014-09-05 96 views
0

我有一個應用程序,從datepicker採取日期,然後顯示在屏幕上。它工作得很好,但隨處可見這種新的雲服務器上,如果我選擇一個日期在九月它顯示爲NET應用程序使用美國日期,而不是歐盟日期

09-APR-2014 16:52到09軍2014 16:52

當它應該是

04月 - 2014年06月2014年

有在web.config中我可以改變,使採用歐式日期設置的應用程序的設置?

+0

有多種方法可以處理這個問題.Web.config設置來修復你的ap對一個特定的文化是一種方法,但我會爭辯說,一個精心設計的應用程序可以在任何文化中運行良好。請爲您的日期選擇器顯示相關的代碼,它是如何填充的以及如何解析它的輸入。 – 2014-09-05 16:27:05

+0

這不是「尋求調試幫助」。該問題詢問如何通過web.config更改本地化設置。 – 2014-09-08 15:07:05

+0

@MattJohnson:OP從來沒有說應用程序會打破*,他說它會爲用戶顯示錯誤的本地化日期。 – 2014-09-08 15:08:34

回答

0

您需要在web.config中設置您的位置。否則,將使用OS默認值。

在ASP.NET網頁中,您可以設置兩種文化值,即Culture和UICulture屬性。文化價值決定了文化相關功能的結果,例如日期,數量和貨幣格式等。 UICulture值決定爲頁面加載哪些資源。

http://msdn.microsoft.com/en-us/library/vstudio/bz9tc508(v=vs.100).aspx

對英國來說,我相信你的項將是

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

如果它是一個Web應用程序,您可以設置:

<system.web> 
    ... 
    <globalization culture="de-CH" uiCulture="de-CH" requestEncoding="UTF-8" responseEncoding="UTF-8"/> 
    ... 
</system.web> 

在web.config文件中。

或者您可以在aspx頁面中添加內聯腳本。
如果您沒有源代碼並且不想設置靜態文化,
(例如,當您想要基於Request.QueryString參數而不是基於Request.QueryString參數切換ReportServer.aspx的語言時,這非常有用語言在瀏覽器中設置):

<script type="text/C#" runat="server"> 
protected override void InitializeCulture() 
{ 
    string lang = "de-CH"; 
     Thread.CurrentThread.CurrentCulture = 
      CultureInfo.CreateSpecificCulture(lang); 
     Thread.CurrentThread.CurrentUICulture = new 
      CultureInfo(lang); 
    } 
    base.InitializeCulture(); 
} 
</script> 

或者你也可以靜態設置的文化在頁面上itselfs

<%@ Page UICulture="de" Culture="de-CH" %> 

需要注意的是由於種種原因這個特殊的滋擾,如果你設置有時不會消失文化在web.config文件(發生在我身上時,安裝我們的在瑞士國家廣播公司的「en-US」服務器上的應用)。

然後,你需要創建一個新的基類,並從System.Web.UI.Page繼承,而不是允許在構造函數補償(假)爲

Public MustInherit Class claPageBaseForm 
    Inherits System.Web.UI.Page 

    Protected Sub New() 
     System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name, False) 
     System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name, False) 
    End Sub 

C#代碼,如果你需要它

public /* abstract */ class claPageBaseForm : System.Web.UI.Page 
{ 

    protected claPageBaseForm() 
    { 
     System.Threading.Thread.CurrentThread.CurrentCulture = 
new System.Globalization.CultureInfo(System.Globalization.CultureInfo. 
CurrentCulture.Name, false); 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo(System.Globalization.CultureInfo. 
CurrentCulture.Name, false); 
    } 

} 

然後在你的網頁代碼隱藏,你從基類而不是System.Web.UI繼承。第

partial class YourPage: claPageBaseForm 
{ 

} 

代替

partial class YourPage: System.Web.UI.Page 
{ 

} 

這是打擊它的最快的方法,因爲你可以在源代碼搜索和替換做。
擁有一個共同的基本頁面是非常有用的。另外,請注意,這個「功能」也會影響類庫(string.Format(Insert INTO TABLE WHATEVER '{0}', dateTime.ToString()))),因此將其設置在頁面上可能不夠(如果當前日期爲< 13,它甚至可能只是保存垃圾在數據庫中,而不是返回一個錯誤 - 再加上它也可以選擇取回垃圾)

+0

混合VB/C#? OP標籤的C#。 – 2014-09-05 16:27:59

0

實際上,它可能是更好的默認瀏覽器指定的語言首選項,這樣你會得到正確的文化視! on user preferences。

<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"/> 
+0

儘管在技術上是正確的,但如果日期處理在後端(SQL ISO-Date-Format)和前端(JavaScript)中未正確完成,那可能是最糟糕的想法。此外,如果您坐在紐約互聯網咖啡館的電腦上,並輸入德國/英國的日期格式(作爲紐約的歐洲),則可以啓用不需要的「功能」,例如切換到英文日期格式。如果你只是將數據放在紐約市的互聯網咖啡中,那麼它也會讓你錯誤地解釋輸出的日期。自動化這不是一個好主意,它是(i18n)地獄之路。 – 2014-09-05 17:06:07

+0

所有這些選擇都取決於實際要求,可能適用於哪一個可能不適用於另一個。通知我說「可能會更好」 – 2014-09-05 18:08:33

相關問題