将数据和时间字符串解析为"访问日期"值

waa*_*ers 4 ms-access vba ms-access-2007

在给定特定日期和时间格式的情况下,如何将日期/时间字符串解析为Access Date对象?

我可以像这样使用CDate()函数:

  Dim StrDateTime As String
  Dim DtTest As Date

  StrDateTime = "2011-12-31 23:59:59"

  DtTest = CDate(StrDateTime)
  MsgBox DtTest
Run Code Online (Sandbox Code Playgroud)

这有效,Access识别格式,很好,但我怎么能完全确定在所有情况下都会发生这种情况(例如日期/时间设置区域设置,访问版本?).我想"告诉"CDate我的特殊日期/时间格式.

其他选项是这个(但很多代码):

  Dim StrDateTime As String
  Dim IntYear As Integer
  Dim IntMonth As Integer
  Dim IntDay As Integer
  Dim IntHour As Integer
  Dim IntMinute As Integer
  Dim IntSecond As Integer

  StrDateTime = "2011-12-31 23:59:59"

  IntYear = Val(Mid(StrDateTime, 1, 4))
  IntMonth = Val(Mid(StrDateTime, 6, 2))
  IntDay = Val(Mid(StrDateTime, 9, 2))
  IntHour = Val(Mid(StrDateTime, 12, 2))
  IntMinute = Val(Mid(StrDateTime, 15, 2))
  IntSecond = Val(Mid(StrDateTime, 18, 2))

  DtTest = DateSerial(IntYear, IntMonth, IntDay)
  DtTest = DtTest + TimeSerial(IntHour, IntMinute, IntSecond)
  MsgBox DtTest
Run Code Online (Sandbox Code Playgroud)

CDate()的其他优点:它在错误的日期/时间值上给出类型不匹配错误.DateSerial + TimeSerial重新计算新的日期和时间,因此"2011-12-31 24:59:59"将成为2012年1月1日0:59:59.

Han*_*sUp 8

格式"yyyy-mm-dd"ISO标准,遇到它时,CDate()期望"yyyy"部分后跟"mm-dd",而不是"dd-mm".因此,该格式的日期字符串是明确的; 无论用户的语言环境如何,它都表示相同的日期值.并CDate()会遵守.

此外,无法CDate()将日期字符串格式化为"yyyy-dd-mm"并获取您想要的日期值.所以CDate("2011-02-01")总是会给你日期值#Feb 1 2011#(不论你的语言环境),即使你想要表示该字符串#Jan 2 2011#.并CDate("2011-31-01")会抛出类型不匹配错误.

另请注意,这仅适用于100年后的日期.(请参阅Heinzi的评论.)