VBA \ VB6 - 将数字转换为DATE

时间:2015-07-16 19:40:57

标签: vba vb6

VBA \ VB6 - 我有一个很长的号码:20141202153026

应转换为日期\时间(只是将其转换为格式正确的日期字符串):

2014/12/02 15:30:26

使用CDate()并不是要切割它。

Format$("20141202153026", "dd/mm/yy hh:mm:ss")

似乎也失败了。 需要一个方向。

编辑:我使用了jac的解决方案,效果很好。 但要记住的一件事是使用cDate()将结果转换回来 - 确保区域设置启动并将年份和月份安排在正确的位置DD / MM / YYYY

 CDate(Format$("20141202153026", "####/##/## ##:##:##"))

2 个答案:

答案 0 :(得分:8)

除了解析字符串之外,没有简单的方法可以做到这一点:

Const strText As String = "20141202153026"

Dim y As String, m As String, d As String
Dim h As String, n As String, s As String

y = Left$(strText, 4)
m = Mid$(strText, 5, 2)
d = Mid$(strText, 7, 2)
h = Mid$(strText, 9, 2)
n = Mid$(strText, 11, 2)
s = Right$(strText, 2)

Dim dtm As Date
dtm = DateSerial(y, m, d) + TimeSerial(h, n, s)

Debug.Print Format$(dtm, "dd/mm/yy hh:nn:ss")       ' => "02/12/14 15:30:26"

修改

虽然如果您想添加对Microsoft VBScript Regular Expressions 5.5库的引用,可以让它更容易一些:

Dim re As New RegExp, dtm As Date
re.Pattern = "^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$"
dtm = re.Replace(strText, "$2/$3/$1 $4:$5:$6")

Debug.Print Format$(dtm, "dd/mm/yy hh:nn:ss")       ' => "02/12/14 15:30:26"

答案 1 :(得分:6)

我必须选择邦德的答案才能更加强大,但如果您正在寻找最快的代码,而且因为我喜欢替代方案,您可以将日期时间字符串格式化为日期格式然后转换。

'number mask depends on the input being correct
CDate(Format$("20141202153026", "####-##-## ##:##:##"))