在VBA中将字符串转换为正确的日期格式

问题描述:

我有一个很长的格式列表:YYYY-MM-DDDD/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()很大程度上取决于系统和串格式。我想知道是否有一个很好的方法来捕捉日月和做正确的转换?该列表始​​终只包含两个提到的日期格式。

+0

使用'Split'和'DateSerial'重建以明确的方式的日期。 – Rory

正如指出的@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 
+0

谢谢。我想没有办法,只能为每个日期格式创建规则。 – Trm

+0

@Trm:实际上,我只给了你我自己创建的一小部分功能。该功能能够“识别”和转换和日期格式的种类,包括。 '.'和'-'和'/'以及任何给定的命令'YYYYMMDD'或'MMDDYYYY'(美国)或'YYYYDDMM'(RU)等到有效日期。此外,它只允许输入数字,也可以将其转换为日期。例如14 =从现在开始的两个星期的日期或-30 = 30天前的日期等等。功能随着时间的推移而增长。但这是非常值得的,没有人想要日期选择器了。 – Ralph

+0

你如何判断'YYYYMMDD'和'YYYYDDMM'? Asuming month and day is 0-12 – Trm