我有一个字符串,其中包含日期和格式为“DD.MM.YYYY HH:mm”的时间,我想将其转换为日期(无论格式如何)。
我正在使用这个测试代码,我找不到它为什么不起作用:
Dim Data1 As String, Data2 As Date
Data1 = "01.01.2015 01:01"
Data2 = CDate(Data1)
答案 0 :(得分:4)
在使用CDate
转换之前,尝试将字符串更接近传统的EN-US格式。
Dim Data1 As String, Data2 As Date
Data1 = Replace("01.01.2015 01:01", Chr(46), Chr(47))
Data2 = CDate(Data1)
Debug.Print Data2
fwiw,提供样本数据从MDY和DMY格式产生模糊结果通常不是一个好主意。这可能是VBA中的一个问题。提供绝对是一种或另一种的数据。
对于包含不明确的DMY / MDY数据(如"02.01.2015 01:01"
)的字符串,这是一种更好的方法。
Dim Data1 As String, Data2 As Date, vDATE As Variant, vTIME As Variant
Data1 = "02.01.2015 01:01"
vTIME = Split(Data1, Chr(32))
vDATE = Split(vTIME(0), Chr(46))
Data2 = DateSerial(vDATE(2), vDATE(1), vDATE(0)) + TimeValue(vTIME(1))
Debug.Print Data2
VBA做出了最好的猜测'使用第一种方法并在2015年2月1日出错。第二种方法更明确,并实现了2015年1月2日的正确答案(假设已知的DMY日期格式)。简而言之,获得约会并不总是足够的;确保它是正确的日期。