2014-09-05 79 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

相关问题