我对 VB 中的 Date.Parse /ParseExact 功能有点头疼。推测一下,我有一个 ASP.Net 4.0 应用程序,在其中一个页面上有一个日历控件,用户可以选择日期和时间,这些控件被输入一个字符串 (strReqDeadline),该字符串采用以下欧洲/英国日期时间格式: dd/MM/yyyy HH:mm:ss.fff
因此,例如 strReqDeadline 的内容将是:29/03/2013 16:30:00.000
然后我需要将它插入到 SQL 日期时间列中,因此显然它需要从英国转换为美国/日期时间格式。我一直试图用 Date.Parse 和 Date.ParseExact 来做这件事,但没有成功。根据我所做的研究,以下内容应该有效:
strReqDeadline = "29/03/2013 16:30:00.000"
Dim usDate = As Date = Date.ParseExact(strReqDeadline, "dd/MM/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture)
但是,在运行时实际发生的事情很奇怪,Date.ParseExact 函数从时间开始修剪分形秒数(据我所知,它不应该这样做,因为过滤器指定了 .fff),否则会留下整个字符串完全不变。所以,如果输出usDate的值,会出现如下:29/03/2013 16:30:00
它应该包含的是日期时间:3/29/2013 4:30PM
真正奇怪的是,如果我在 usDate 上监视并启动应用程序,在开发环境中,它的值显示为#3/29/2013 4:30PM#,无论是在监视列表中还是在源窗口中悬停时,但任何形式的输出都会显示原始字符串,只是减去秒的小数部分,并且不会转换为日期时间。
从我读到的'InvariantCulture'规范应该否定任何特定于语言环境的输出问题,但以防万一这是问题,我还尝试使用 System.Globalization.CultureInfo.CreateSpecificCulture("en-GB") 指定明确的本地文化(也尝试过 fr-FR),但这没有区别。如果有任何相关性,客户端和服务器上的 Windows 区域设置都设置为 UK。
也许我遗漏了一些非常明显的东西,但我不明白为什么我会得到这个输出,Date.ParseExact 不会抛出任何异常或抱怨字符串未被识别,但我很难理解为什么会这样只是删除小数秒而不做其他任何事情,特别是因为输入弹簧与指定的掩码完全匹配。
我很想知道是否有其他人遇到过这样的奇怪问题以及您对此做了什么!
谢谢 :)
编辑:带有 SQL 部分的完整代码如下:
strReqDeadline = "29/03/2013 16:30:00.000"
Dim usDate As Date = Date.ParseExact(strReqDeadline, "dd/MM/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture)
'SQL
Dim con As New Data.SqlClient.SqlConnection("data source=XXXXX;initial catalog=YYYYY;Integrated Security=True")
Dim cmd As New Data.SqlClient.SqlCommand()
cmd.Connection = con
cmd.CommandText = "INSERT INTO Requests (ReqOwnerID, ReqDeadline, ReqStatus)" _
& "VALUES ('" & UserID & "', '" & usDate & "', '1')"
con.Open()
Dim NewReqID = cmd.ExecuteScalar()
con.Close()
'