我有一個應用程序,從datepicker採取日期,然後顯示在屏幕上。它工作得很好,但隨處可見這種新的雲服務器上,如果我選擇一個日期在九月它顯示爲NET應用程序使用美國日期,而不是歐盟日期
09-APR-2014 16:52到09軍2014 16:52
當它應該是
04月 - 2014年06月2014年
有在web.config中我可以改變,使採用歐式日期設置的應用程序的設置?
我有一個應用程序,從datepicker採取日期,然後顯示在屏幕上。它工作得很好,但隨處可見這種新的雲服務器上,如果我選擇一個日期在九月它顯示爲NET應用程序使用美國日期,而不是歐盟日期
09-APR-2014 16:52到09軍2014 16:52
當它應該是
04月 - 2014年06月2014年
有在web.config中我可以改變,使採用歐式日期設置的應用程序的設置?
您需要在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"/>
如果它是一個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,它甚至可能只是保存垃圾在數據庫中,而不是返回一個錯誤 - 再加上它也可以選擇取回垃圾)
混合VB/C#? OP標籤的C#。 – 2014-09-05 16:27:59
實際上,它可能是更好的默認瀏覽器指定的語言首選項,這樣你會得到正確的文化視! on user preferences。
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"/>
儘管在技術上是正確的,但如果日期處理在後端(SQL ISO-Date-Format)和前端(JavaScript)中未正確完成,那可能是最糟糕的想法。此外,如果您坐在紐約互聯網咖啡館的電腦上,並輸入德國/英國的日期格式(作爲紐約的歐洲),則可以啓用不需要的「功能」,例如切換到英文日期格式。如果你只是將數據放在紐約市的互聯網咖啡中,那麼它也會讓你錯誤地解釋輸出的日期。自動化這不是一個好主意,它是(i18n)地獄之路。 – 2014-09-05 17:06:07
所有這些選擇都取決於實際要求,可能適用於哪一個可能不適用於另一個。通知我說「可能會更好」 – 2014-09-05 18:08:33
有多種方法可以處理這個問題.Web.config設置來修復你的ap對一個特定的文化是一種方法,但我會爭辯說,一個精心設計的應用程序可以在任何文化中運行良好。請爲您的日期選擇器顯示相關的代碼,它是如何填充的以及如何解析它的輸入。 – 2014-09-05 16:27:05
這不是「尋求調試幫助」。該問題詢問如何通過web.config更改本地化設置。 – 2014-09-08 15:07:05
@MattJohnson:OP從來沒有說應用程序會打破*,他說它會爲用戶顯示錯誤的本地化日期。 – 2014-09-08 15:08:34