Спасибо за Ваш ответ! После моей проверки вы правы.

знаю, мы можем использовать ниже, чтобы примерно преобразовать метку времени 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

Ответы на вопрос(0)

Ваш ответ на вопрос