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.
格式"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的评论.)