首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel vba :将Unix时间戳转换为日期时间

Excel vba :将Unix时间戳转换为日期时间
EN

Stack Overflow用户
提问于 2022-07-17 12:34:14
回答 1查看 143关注 0票数 0

我知道这个问题被问了很多次,但出于某种原因,似乎没有一个解决方案对我有效。

我有一个unix时间戳(例如,使用1637402076084)

在我的excel表上,我可以使用= (C2/ 86400000) + DATE(1970,1,1)来转换罚款。

但是,我想在我的VBA代码中这样做,因为这里有很多数据,我更喜欢在数组中这样做,然后将我的数组应用到工作表中(为了性能目的)。

然而,在我的代码中,我试图使用dateAdd

DateAdd("s",1637402076084#,"1/1/1970 00:00:00")

但是我得到了一个溢出错误

我想这是因为unix时间戳太大了吧?但是它是一个api调用返回的函数,也是一个geniune调用(如公式所示),但我不知道为什么我的代码不能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-17 14:41:36

UNIX时间戳有两种类型。10位和13位数。您尝试使用的函数用于10位类型。要转换13位数类型,您应该创建另一个函数,与您在单元格中使用的完全相同:

代码语言:javascript
运行
复制
Function fromUNIX13Digits(uT) As Date
   fromUNIX13Digits = CDbl(uT) / 86400000 + DateSerial(1970, 1, 1)
End Function

并测试如下:

代码语言:javascript
运行
复制
Sub testFromUNIX13()
      Debug.Print fromUNIX13Digits("1637402076084")
End Sub

对于10位类型,可以使用:

代码语言:javascript
运行
复制
Public Function fromUnix10(ts) As Date
    fromUnix10 = DateAdd("s", CDbl(ts), "1/1/1970")
End Function

并使用以下方法进行测试:

代码语言:javascript
运行
复制
Sub testFromUnix10()
   Debug.Print fromUnix10("1651680385")
   Debug.Print Format(fromUnix10("1651680385"), "yyyy/mm/dd hh:nn:ss")
End Sub

或者构建一个能够处理这两种类型的函数:

代码语言:javascript
运行
复制
Function FromUNIX(uT) As Date
   If Len(uT) = 10 Then
        FromUNIX = DateAdd("s", CDbl(uT), "1/1/1970")
   ElseIf Len(uT) = 13 Then
        FromUNIX = CDbl(uT) / 86400000 + DateSerial(1970, 1, 1)
   Else
        MsgBox "No UNIX timestamp passed to be converted..."
   End If
End Function

并使用以下方法进行测试:

代码语言:javascript
运行
复制
Sub testFromUnix_()
 Dim x As String, y As String
 x = "1637402076084"
 y = "1651680385"
 Debug.Print FromUNIX(x)
 Debug.Print FromUNIX(y)
End Sub
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73011816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档