请参阅以下代码:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
Me.Load
Dim str As String = "1-2-2014"
Dim dte As Date = CDate(str)
MsgBox(dte.Month)
End Sub
日期字面是:#1/2/2014#。这一直被解释为2014年1月2日,如下所述:http://msdn.microsoft.com/en-us/library/3eaydw6e.aspx。但是,在上面的代码片段中,日期被解释为2014年2月1日。传递字符串时是否使用了本地区域设置?
答案 0 :(得分:0)
您正在查看Date
类型 MSDN文档,但创建的字符串"1-2-2014"
不是Date
类型,并且不会像那样。有关订单和使用#
的说明仅适用于DateTime
变量:
Dim myDt As Date = #1/2/2014#
通常,不建议将日期和时间硬编码为字符串(如本例所示)。使用日期文字和时间文字,例如#Feb 12,1969#和#4:45:23 PM#,而不是。
作为一个字符串,很难知道它知道如何将其转换回来的格式/文化。相反,将基于日期的数据项保留为日期类型变量,并为用户,报告,MsgBox等简单格式化它们:
' DISPLAY a date anyway we want, without changing the value:
Console.WriteLine(dt.ToString("hh:mm M/d/yyyy")) ' => 05:55 2/11/2010
Console.WriteLine(dt.ToString("HH.mm M/d/yyyy")) ' => 17.55 2/11/2010
Console.WriteLine(dt.ToString("MM/dd/yyyy HH:mm")) ' => 02/11/2010 17:55
除非另有说明,否则NET和VB总是假设字符串采用当前的文化格式。 CDate
已简化,因此您无法传递格式,但其他转换函数允许您指定文化或格式:
Dim myStr As String = "17:55 2/11/2010" ' ad odd date/time format
Dim dtVar As DateTime = DateTime.ParseExact(myDate,
"HH:mm M/dd/yyyy",
Globalization.CultureInfo.InvariantCulture)