繁体   English   中英

挪威文化的无效日期时间格式异常

[英]Invalid datetime format exception for Norwegian culture

在我的web.config文件中,有以下行:

<globalization culture="auto:en-GB" uiCulture="auto:en-GB" requestEncoding="utf-8" responseEncoding="utf-8" responseHeaderEncoding="utf-8"/>

ASP.Net很好地处理了所有日期/时间格式。 在示例页面中应用以下代码...

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    txt.Text = New DateTime(2010, 1, 25).ToString()
End Sub

Protected Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
    Dim dt As DateTime = Convert.ToDateTime(txt.Text.Trim())
    Trace.Warn(dt.ToString())
End Sub

使用浏览器,将其设置为英语(英国),我看到的日期显示为

25/01/2010 00:00:00

按下按钮并将其转换回DateTime值时,它可以完美工作。

如果我将浏览器(Chrome)设置更改为Norwegian Bokmal,并加载页面,则会看到以下内容:

25.01.2010 00.00.00

这再次是正确的, 但是 ,如果随后我提交表单,ASP.Net将崩溃:

无法将字符串识别为有效的DateTime。

第9行:Dim dt As DateTime = Convert.ToDateTime(txt.Text.Trim())

为什么会这样呢? 当然,如果ASP.Net能够根据区域性设置显示日期,它应该能够读取它们吗? 我已经尝试过英国英语和美国英语,并且都可以按预期工作,以及其他方面都可以正常工作,因此它似乎与挪威语有某种联系。

终于找到答案了。 这是.Net框架v4.0 +中的错误。

Microsoft Connect报道, 这里有一个临时解决方法。 显然,这是与Windows 10严格相关的问题:

Windows 10更改某些区域性的日期和时间格式设置。 特别令人关注的是三个不同地区的七种文化:

  1. 芬兰
  2. 挪威语Bokmål(“挪威”和“斯瓦尔巴特群岛和扬马延”的变体)
  3. 塞尔维亚语(变体“西里尔语,科索沃”,“拉丁语,黑山”,“拉丁语,塞尔维亚”和“拉丁语,科索沃”)。

对于这七个区域性,Windows 10将日期和时间分隔符更改为相同。 例如,在芬兰语中,标准日期格式以前是26.8.2015 21:08,而现在是26.8.2015 21.08 –请注意时间分隔符中的细微变化。

在所有当前发布的.NET版本中,DateTime.Parse方法有一个缺点:在日期/时间分隔符为相同字符的区域性中,它始终无法解析日期或日期+时间组合。 此错误与Windows 10的区域性更改一起打破了以前的DateTime硬规则.Parse始终能够解析区域性的默认DateTime表示形式。 现在,DateTime.Parse(DateTime.Now.ToString())在上述条件下不再起作用。 DateTime.Parse(DateTime.Now.ToShortDateString())也没有,这有点违反直觉,因为更改的时间分隔符甚至都没有涉及,但是仍然是正确的–解析器认为它是在解析时间而不是日期。

官方补丁将于2015年9月发布。

使用Convert.ToDateTime(string, IFormatProvider)重载来指定要使用的CultureInfo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM