2014-06-26 60 views
0

請參考下面的代碼:日期類型:字符串文字和日期文字 - 不同的格式日期

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日。傳遞字符串時使用本地區域設置嗎?

+2

你的arent傳遞字符串,要轉換的一個。 NET假設「1-2-2014」是您所在地區/文化的有效日期時間,並根據此日期生成日期。如果您想要/需要爲字符串版本指定格式或文化,請使用'convert.ToDateTime'或'DateTime.ParseExact'。請參閱http://stackoverflow.com/a/24175610/1070452 – Plutonix

回答

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#。

作爲一個字符串,很難知道如何將其轉換回來的格式/文化。相反,保持基於日期的數據項Date類型變量和簡單的格式,它們對於用戶來說,報告,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)