如果给定特定的日期和时间格式,如何将日期/时间字符串解析为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。
答案 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的评论。)