我们有一个生成报告的Web应用程序.数据来自数据库.
当我们在本地化系统上运行Web应用程序时,它会爆炸.我们在DateTime.Parse(dateString)上追踪了这个问题; 呼叫.
存储在数据库中的日期在某种程度上取决于计算机的区域设置.
在英语系统中,日期存储为MM/DD/YYYY(06/25/2009),这是完全正常的.
在俄罗斯系统上,日期存储为MM.DD.YYYY(06.25.2009).这很奇怪,因为俄罗斯系统中短日期格式的默认设置(我检查过)是dd.MM.yyyyy ......所以它应该是25.06.2009.我不明白为什么它接受了默认的分隔符(.)而不是默认的日期格式.
那么无论如何,我如何在本地化系统上解析日期字符串?如果我使用俄罗斯文化信息,它仍会抛出一个错误,因为它期待dd.MM.yyyyy.
谢谢!
您永远不应该在数据库中存储本地化的日期字符串.
您必须将日期存储在日期列中,然后在显示数据时对其进行本地化.
此示例根据请求路径设置lang,但可能具有其他机制.
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim lang As String
If HttpContext.Current.Request.Path.Contains("/en/") Then
lang = "en" 'english'
ElseIf HttpContext.Current.Request.Path.Contains("/pt/") Then
lang = "pt" 'portugues'
Else
lang = "es" 'español, the default for the site'
End If
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang)
End Sub
Run Code Online (Sandbox Code Playgroud)
从文本输入中获取数据很简单,这是一个示例,但使用日期验证器,您应该没问题.
dim theDate as date
if IsDate( txtDate.text ) then
theDate = DateTime.Parse(txtDate.text)
else
'throw exception or something
end if
Run Code Online (Sandbox Code Playgroud)
既然你说你无法改变它的存储方式,你就会遇到大麻烦,除非你在db记录中有某种方式来告诉日期的格式.问题不在于分隔符,但是当你找到像6/3/2009这样的日期时,你不知道它是6月6日还是3月6日.
| 归档时间: |
|
| 查看次数: |
5256 次 |
| 最近记录: |