【问题标题】:Unable to format a timestamp to a date in vba无法将时间戳格式化为 vba 中的日期
【发布时间】:2021-11-16 06:13:24
【问题描述】:

我正在尝试将时间戳1624373961042 格式化为日期,但我在下面尝试的方式总是给我overflow 错误。我期待从那个时间戳得到这个日期2021-06-22。我怎样才能使它成为可能?

Sub getDate()
    Dim tDate As Long, timestamp As String
    timestamp = "1624373961042"
    
    tDate = Int(timestamp) / 1000
    MsgBox Format(tDate, "yyyymmdd")
End Sub

【问题讨论】:

  • Int 返回数字的整数部分,您应该使用Cint 或在这种情况下使用CLng 以避免溢出。
  • 你需要做:tDate = Clng(cdbl(timestamp)/84600000+2569) timstamp 是自 1970 年 1 月 1 日以来的毫秒数。自 1899 年 12 月 31 日以来的 Excel 天数。
  • 对不起应该是:tDate = Clng(cdbl(timestamp)/84600000+25569)
  • 请注意:CLng 会将日期四舍五入。您可以返回 INT,它将截断小数而不进行四舍五入。
  • 抱歉应该是:tDate = INT(cdbl(timestamp)/86400000+25569) 我把 4 和 6 颠倒了。

标签: vba date timestamp


【解决方案1】:

您需要将数字除以一天中的毫秒数:86400000

然后添加从 1899 年 12 月 31 日到 1970 年 1 月 1 日的天数:25569

Sub getDate()
    Dim tDate As Long, timestamp As String
    timestamp = "1624373961042"
    
    tDate = Int((CDbl(timestamp) / 86400000) + 25569)
    MsgBox Format(tDate, "yyyymmdd")
End Sub

【讨论】:

  • 所以,只要像你这样的开发者在场,就不可能了,对吧?感谢一万亿。
猜你喜欢
  • 2018-06-15
  • 2021-04-14
  • 2015-08-09
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2016-11-26
  • 2020-06-22
  • 2020-12-06
相关资源
最近更新 更多