在VB.net表单上,我有一个名为DatePicker
的{{1}}字段和一个名为PostDateTxt
的{{1}}的文本框。我目前正在从表单中读取值,并将它们存储在变量中,其中Time
以dd / mm / yyyy格式保存String日期值,而thetime
则以格式保存String时间值时:分。它们被存储为字符串,因为这是它们在文本框中的格式,从中可以获取它们的值。
当我单击表单上的“更新”按钮时,我正在更新数据库中特定项目的日期和时间值。单击“更新”按钮时调用的函数是:
fullPostDate
我现在想将这些值转换回DateTime对象,并尝试使用以下行将字符串解析回DateTime:
postTime
但是,当我逐步执行代码时,执行上述行后,会收到一条Protected Sub UpdateButton_Click(sender As Object, e As EventArgs) Handles UpdateButton.Click
If Page.IsPostBack Then
...
Dim mypostdate As String = HttpUtility.HtmlEncode(PostDateTxt.Text & " " & theTime.Text)
...
'Split the mypostdate variable into separate String variables for date & time
Dim postDate As DateTime = HttpUtility.HtmlDecode(fullPostDate)
...
...
End Sub
消息,内容为:
System.InvalidCastException:'从字符串“ 03/29/3019”到“日期”类型的转换无效'
这是为什么?如何将String值转换为Dim postDate As DateTime = HttpUtility.HtmlDecode(fullPostDate
对象?
答案 0 :(得分:1)
您正在尝试将String对象直接转换为DateTime对象,这是不可能直接执行的,因为它们不共享允许它们这样做的类层次结构。
您应该尝试将String解析为DateTime对象,并为解析器指定一种用于处理字符串的日期格式。
例如 zh-CN的5/7/19是2019年7月5日,在en-US是2019年5月7日
DateTime.Parse(MyString, MyCultureInfo)
您的MyCultureInfo与您希望输入的日期字符串的格式匹配。 例如
MyCultureInfo = new CultureInfo("en-US")
ref https://docs.microsoft.com/en-us/dotnet/standard/base-types/parsing-datetime
答案 1 :(得分:0)
尝试使用DateTime.ParseExact
。请注意,该空格是格式字符串和该月份的国会大厦MM的一部分。小写m表示分钟。我确定这是一个错字,但3019年可能超出范围。 :-)
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim dateString As String = "01/12/2019 05:22" '
Dim d As DateTime = DateTime.ParseExact(dateString, "dd/MM/yyyy hh:mm", CultureInfo.CurrentCulture)
Debug.Print(d.ToString)
'Prints 12/1/2019 5:22:00 AM
End Sub