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

时间:2011-09-16 09:28:50

标签: 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

这有效,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

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

1 个答案:

答案 0 :(得分:8)

格式“yyyy-mm-dd”ISO standard,遇到它时,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的评论。)