日期类型:字符串文字和日期文字 - 日期的不同格式

时间:2014-06-26 22:05:52

标签: vb.net

请参阅以下代码:

 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日。传递字符串时是否使用了本地区域设置?

1 个答案:

答案 0 :(得分:0)

您正在查看Date 类型 MSDN文档,但创建的字符串"1-2-2014"不是Date类型,并且不会像那样。有关订单和使用#的说明仅适用于DateTime变量:

Dim myDt As Date =  #1/2/2014#

另请参阅MSDN says about CDate

  

通常,不建议将日期和时间硬编码为字符串(如本例所示)。使用日期文字和时间文字,例如#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)