VBA \ VB6 - 将数字转换为 DATE
VBA \ VB6 - Convert number to DATE
VBA\VB6-
我有一个长号:20141202153026
应将其转换为 date\time(只是为了转回格式正确的日期字符串)如:
2014/12/02 15:30:26
使用 CDate()
并没有减少它。
Format$("20141202153026", "dd/mm/yy hh:mm:ss")
好像也失败了。
这里需要一个方向。
编辑:我使用了 jac 的解决方案并且效果很好。
不过要记住的一件事是使用 cDate() 将结果转换回日期 - 以确保区域设置生效并将年和月安排在正确的位置 DD/MM/YYYY
CDate(Format$("20141202153026", "####/##/## ##:##:##"))
除了解析字符串之外,没有简单的方法可以做到这一点:
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, "// ::")
Debug.Print Format$(dtm, "dd/mm/yy hh:nn:ss") ' => "02/12/14 15:30:26"
我不得不接受 Bond 的回答,因为它更稳健,但如果您正在寻找最快的代码最少的出路,并且只是因为我喜欢替代方案,您可以将日期时间字符串格式化为日期格式,然后将其转换.
'number mask depends on the input being correct
CDate(Format$("20141202153026", "####-##-## ##:##:##"))
VBA\VB6-
我有一个长号:20141202153026
应将其转换为 date\time(只是为了转回格式正确的日期字符串)如:
2014/12/02 15:30:26
使用 CDate()
并没有减少它。
Format$("20141202153026", "dd/mm/yy hh:mm:ss")
好像也失败了。 这里需要一个方向。
编辑:我使用了 jac 的解决方案并且效果很好。 不过要记住的一件事是使用 cDate() 将结果转换回日期 - 以确保区域设置生效并将年和月安排在正确的位置 DD/MM/YYYY
CDate(Format$("20141202153026", "####/##/## ##:##:##"))
除了解析字符串之外,没有简单的方法可以做到这一点:
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, "// ::")
Debug.Print Format$(dtm, "dd/mm/yy hh:nn:ss") ' => "02/12/14 15:30:26"
我不得不接受 Bond 的回答,因为它更稳健,但如果您正在寻找最快的代码最少的出路,并且只是因为我喜欢替代方案,您可以将日期时间字符串格式化为日期格式,然后将其转换.
'number mask depends on the input being correct
CDate(Format$("20141202153026", "####-##-## ##:##:##"))