[英]Excel vba : Convert Unix Timestamp to Date Time
我知道這已經被問了很多,但由於某種原因,沒有一個解決方案似乎對我有用。
我有一個 unix 時間戳(例如使用 1637402076084)
在我的 excel 表上,我可以使用 = (C2/86400000) + DATE(1970,1,1) 進行轉換
但是我想在我的 VBA 代碼中執行此操作,因為有很多數據,我更喜歡在數組中完成所有操作,然后將我的數組應用於工作表(出於性能目的)
但是在我的代碼中,我嘗試使用 dateAdd
DateAdd("s", 1637402076084#, "1/1/1970 00:00:00")
但我得到一個溢出錯誤
我假設這是因為 unix 時間戳太大了? 但它是從 api 調用返回的,是一個真正的(如公式所示),但我不確定為什么我的代碼不起作用。
有兩種類型的 UNIX 時間戳。 10位和13位。 您嘗試使用的功能是 10 位數字類型。 要轉換 13 位數字類型,您應該創建另一個函數,與在單元格中使用的完全相同:
Function fromUNIX13Digits(uT) As Date
fromUNIX13Digits = CDbl(uT) / 86400000 + DateSerial(1970, 1, 1)
End Function
並將其測試為:
Sub testFromUNIX13()
Debug.Print fromUNIX13Digits("1637402076084")
End Sub
對於 10 位數字類型,您可以使用:
Public Function fromUnix10(ts) As Date
fromUnix10 = DateAdd("s", CDbl(ts), "1/1/1970")
End Function
並使用以下方法對其進行測試:
Sub testFromUnix10()
Debug.Print fromUnix10("1651680385")
Debug.Print Format(fromUnix10("1651680385"), "yyyy/mm/dd hh:nn:ss")
End Sub
或者構建一個能夠處理這兩種類型的函數:
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
並使用以下方法對其進行測試:
Sub testFromUnix_()
Dim x As String, y As String
x = "1637402076084"
y = "1651680385"
Debug.Print FromUNIX(x)
Debug.Print FromUNIX(y)
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.