.NET应用程序使用美国日期而不是欧盟日期

本文关键字:日期 NET 美国 应用程序 | 更新日期: 2023-09-27 18:20:58

我有一个应用程序,它从日期选择器中获取日期,然后在屏幕上显示。它在任何地方都运行良好,但在这个新的云服务器上,如果我选择9月份的日期,它会显示为

2014年4月9日至2014年6月9日16:52

什么时候应该是

2014年9月4日至2014年9日6日

web.config中是否有我可以更改的设置以使用欧洲日期设置制作应用程序?

.NET应用程序使用美国日期而不是欧盟日期

您需要在web.config中设置位置。否则,将使用操作系统默认值。

在ASP.NET网页中,可以设置两个区域性值,即区域性和UICulture属性。区域性值确定区域性相关函数的结果,如日期、数字和货币格式等。UICulture值确定为页面加载哪些资源。

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

对于英国,我相信你的参赛作品将是

<globalization culture="en-GB"/>

实际上,默认使用浏览器指定的语言首选项可能更好,这样您将根据用户偏好获得正确的区域性。

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

如果是web应用程序,您可以设置:

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

在web.config文件中。

或者,您可以在aspx页面中添加内联脚本
如果您没有源代码并且不想设置静态区域性,这将非常有用,
(例如,当您希望基于Request.QueryString-parameter而不是浏览器中设置的语言来切换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>

或者你可以在页面上静态设置区域性本身的

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

请注意,如果您在web.config文件中设置区域性,由于某些原因,这种特殊的麻烦有时不会消失(我在瑞士国家广播公司的"en-US"服务器上安装应用程序时遇到过这种情况)。

然后,您需要创建一个新的基类并从System.Web.UI.Page继承,并且不允许在构造函数(the,False)中重写

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.page 继承

partial class YourPage: claPageBaseForm
{
}

而不是

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

这是对抗它的最快方法,因为你可以在源代码中进行搜索和替换
不管怎样,拥有一个通用的基页是很有用的。

此外,请注意,此"功能"也会影响类库(string.Format(Insert INTO TABLE WHATEVER '{0}', dateTime.ToString())),因此在页面上设置它可能不够(如果当前日期<13,它甚至可能只在数据库中保存垃圾,而不会返回错误-此外,它还可以在select时检索垃圾!)