我有一个应用程序,从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