VB.NET Date 結構 (對應 System.DateTime) 提供多種建構路徑。本文詳細說明四種常見實例化方式、參數含義、預設時間行為、24/12 小時制對照,並附上格式化輸出最佳實務。
四種建構方式對照表
| 語法 | 範例 | 結果 (預設格式) | 說明 |
| 日期常值 | #1/2/2007# | 2007/1/2 上午 12:00:00 | 編譯期常數,唯讀,格式固定 M/d/yyyy |
| 建構函式 (年月日) | New Date(2007, 1, 2) | 2007/1/2 上午 12:00:00 | 時間預設 0:0:0 (午夜) |
| 建構函式 (含時分秒) | New Date(2007, 2, 3, 3, 1, 59) | 2007/2/3 上午 03:01:59 | 24 小時制 (軍用時間) |
| 建構函式 (下午時間) | New Date(2007, 2, 3, 15, 1, 59) | 2007/2/3 下午 03:01:59 | 15 = 3 PM |
完整程式碼範例
Private Sub DateTimeCombination()
Dim dt1 As Date = #1/2/2007#
Dim dt2 As New Date(2007, 1, 2)
Dim dt3 As New Date(2007, 2, 3, 3, 1, 59) ' 03:01:59 AM
Dim dt4 As New Date(2007, 2, 3, 15, 1, 59) ' 03:01:59 PM
MsgBox("dt1: " & dt1.ToString())
MsgBox("dt2: " & dt2.ToString())
MsgBox("dt3: " & dt3.ToString())
MsgBox("dt4: " & dt4.ToString())
End Sub
關鍵行為解析
- 日期常值
#...#:僅限日期部分,時間**永遠為 00:00:00** (午夜)。不可在常值中指定時間 (如 #1/2/2007 3:59 PM# 為語法錯誤)。
- 建構函式省略時間:
New Date(y, m, d) 等同 New Date(y, m, d, 0, 0, 0)。
- 時元參數為 24 小時制:0~23,12 為中午,13~23 為下午 1~11 點。
- 毫秒精度:另提供
New Date(y, m, d, h, m, s, ms) 多載。
- Kind 屬性:以上建構方式產生
DateTimeKind.Unspecified。跨時區運算請明確指定 DateTime.SpecifyKind(dt, DateTimeKind.Utc/Local)。
格式化輸出最佳實務
' 標準格式字串
dt.ToString("yyyy/MM/dd HH:mm:ss") ' 2007/02/03 15:01:59
dt.ToString("yyyy/MM/dd hh:mm:ss tt") ' 2007/02/03 03:01:59 PM
dt.ToString("D") ' 長日期格式 (依文化特性)
dt.ToString("T") ' 長時間格式
' 自訂文化特性
dt.ToString("yyyy/MM/dd HH:mm:ss", New Globalization.CultureInfo("en-US"))
dt.ToString("yyyy/MM/dd HH:mm:ss", Globalization.CultureInfo.InvariantCulture) ' 固定格式,適合日誌/檔名
常見陷阱