Спасибо за Ваш ответ! После моей проверки вы правы.
знаю, мы можем использовать ниже, чтобы примерно преобразовать метку времени UNIX в VB Date
CDate ([метка времени UNIX] / 60/60/24) + «01.01.1970»
Однако информация о часовом поясе и дневном свете не учитывается.
Часовой пояс не имеет большого значения. Но я не могу получить информацию о дневном смещении для конкретной метки времени UNIX.
Хотя дневное смещение Даты 1/1, очевидно, отличается от Даты 6/1, однако, для Даты 3/12 или Даты 11/5 расчет смещения дневного света очень сложен.
Я пробовал несколько API, таких как «FileTimeToLocalFileTime» и «GetTimeZoneInformation», но ни один из них не работает.
Вот мой код, который не может справиться с дневным уклоном
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function LocalFileTimeToFileTime Lib "kernel32" (src@, tgt@) As Long
Private Declare PtrSafe Function FileTimeToLocalFileTime Lib "kernel32" (src@, tgt@) As Long
#Else
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (src@, tgt@) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (src@, tgt@) As Long
#End If
Public Function ToUTC(ByVal datetime As Date) As Date
Dim ftLoc@, ftUtc@
ftLoc = (datetime - #1/1/1601#) * 86400000
LocalFileTimeToFileTime ftLoc, ftUtc
ToUTC = ftUtc / 86400000# + #1/1/1601#
End Function
Public Function FromUTC(ByVal datetime As Date) As Date
Dim ftUtc@, ftLoc@
ftUtc = (datetime - #1/1/1601#) * 86400000
FileTimeToLocalFileTime ftUtc, ftLoc
FromUTC = ftLoc / 86400000# + #1/1/1601#
End Function
Function getDateFromTimestamp(ByVal value) As Date
Dim t1, t2
t1 = CDate(value / 60 / 60 / 24) + "1/1/1970"
t2 = FromUTC(t1)
Debug.Print t2 - t1
getDateFromTimestamp = t2
End Function