我有很长的日期列表,格式为:YYYY-MM-DD
或DD/MM/YYYY
。我使用CDate()
进行转换。但是,如果系统默认日期为YYYY-MM-DD
,则会从DD/MM/YYYY
转换错误的日期,如果Day小于13,则Day和Month会混淆。例如:
date_string = "12/02/2016"
date_string = Cdate(date_string)
Debug.Print date_string #prints "2016-12-02"
我理解CDate()
在很大程度上取决于系统和字符串格式。我想知道是否有一个很好的方法来捕捉日月和正确的转换?该列表始终只包含两种提到的日期格式。
答案 0 :(得分:1)
正如@Rory所指出的,以下功能应该可以解决问题:
Function ConvertDate(strTMP As String)
Select Case True
Case InStr(1, strTMP, "-", vbTextCompare) > 0
ConvertDate = DateSerial(Split(strTMP, "-")(0), Split(strTMP, "-")(1), Split(strTMP, "-")(2))
Case InStr(1, strTMP, "/", vbTextCompare) > 0
ConvertDate = DateSerial(Split(strTMP, "/")(2), Split(strTMP, "/")(1), Split(strTMP, "/")(0))
Case Else
ConvertDate = "error"
End Select
End Function