你是对的,小数秒阻止CDate
接受你的字符串。你可以去掉小数秒。但是由于您最终需要年份和月份,您可以忽略所有时间组件而只使用日期部分。
查看此即时窗口会话是否提供任何有用的信息。
MyString = Format(Now(), "yyyy-mm-dd hh:nn:ss") & ".0000000"
? MyString
2013-02-14 23:38:09.0000000
' if date format is always yyyy-mm-dd,
' give CDate the first 10 characters
? CDate(Left(MyString, 10))
2/14/2013
' year
? DatePart("yyyy", CDate(Left(MyString, 10)))
2013
' or
? Year(Left(MyString, 10))
2013
' month
? DatePart("m", CDate(Left(MyString, 10)))
2
' or
? Month(CDate(Left(MyString, 10)))
2
' if date format can vary slightly, eg yyyy-m-d,
' give CDate everything before the first space
? CDate(Left(MyString, InStr(MyString, Chr(32)) -1))
2/14/2013
? Year(CDate(Left(MyString, InStr(MyString, Chr(32)) -1)))
2013
? Month(CDate(Left(MyString, InStr(MyString, Chr(32)) -1)))
2
您没有提到在获得年份和日期数字后您将如何处理它们。如果您打算将它们作为字符串连接在一起,您可以使用Format()
.
? Format(Left(MyString, 10), "yyyymm")
201302