在VBA中将字符串转换为正确的日期格式
我有一个很长的格式列表:YYYY-MM-DD
或DD/MM/YYYY
。我使用CDate()
进行转换。但是,如果系统默认的日期为YYYY-MM-DD
,我从DD/MM/YYYY
转换错误的日期,其中日期和月份得到混合,如果日小于13例如:在VBA中将字符串转换为正确的日期格式
date_string = "12/02/2016"
date_string = Cdate(date_string)
Debug.Print date_string #prints "2016-12-02"
我明白CDate()
很大程度上取决于系统和串格式。我想知道是否有一个很好的方法来捕捉日月和做正确的转换?该列表始终只包含两个提到的日期格式。
正如指出的@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
谢谢。我想没有办法,只能为每个日期格式创建规则。 – Trm
@Trm:实际上,我只给了你我自己创建的一小部分功能。该功能能够“识别”和转换和日期格式的种类,包括。 '.'和'-'和'/'以及任何给定的命令'YYYYMMDD'或'MMDDYYYY'(美国)或'YYYYDDMM'(RU)等到有效日期。此外,它只允许输入数字,也可以将其转换为日期。例如14 =从现在开始的两个星期的日期或-30 = 30天前的日期等等。功能随着时间的推移而增长。但这是非常值得的,没有人想要日期选择器了。 – Ralph
你如何判断'YYYYMMDD'和'YYYYDDMM'? Asuming month and day is 0-12 – Trm
使用'Split'和'DateSerial'重建以明确的方式的日期。 – Rory