【问题标题】:VBA \ VB6 - Convert number to DATEVBA \ VB6 - 将数字转换为日期
【发布时间】:2015-07-16 19:40:56
【问题描述】:

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", "####/##/## ##:##:##"))

【问题讨论】:

    标签: vba vb6


    【解决方案1】:

    我必须选择 Bond 的答案,因为它更健壮,但如果您正在寻找最快的最少代码方式,并且仅仅因为我喜欢替代方案,您可以将日期时间字符串格式化为日期格式,然后将其转换。

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

    【讨论】:

    • 喜欢这个。非常有创意地使用Format
    【解决方案2】:

    除了解析字符串之外没有简单的方法:

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多