Option Explicit
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
' Convert a Date into a SYSTEMTIME.
Private Sub DateToSystemTime(ByVal the_date As Date, ByRef _
system_time As SYSTEMTIME)
With system_time
.wYear = Year(the_date)
.wMonth = Month(the_date)
.wDay = Day(the_date)
.wHour = Hour(the_date)
.wMinute = Minute(the_date)
.wSecond = Second(the_date)
End With
End Sub
' Convert a SYSTEMTIME into a Date.
Private Sub SystemTimeToDate(system_time As SYSTEMTIME, _
ByRef the_date As Date)
With system_time
the_date = DateSerial(.wYear, .wMonth, .wDay) + _
TimeSerial(.wHour, .wMinute, .wSecond)
End With
End Sub
' Convert a local time to UTC.
Public Function LocalTimeToUTC(ByVal the_date As Date) As _
Date
Dim system_time As SYSTEMTIME
Dim local_file_time As FILETIME
Dim utc_file_time As FILETIME
' Convert it into a SYSTEMTIME.
DateToSystemTime the_date, system_time
' Convert it to a FILETIME.
SystemTimeToFileTime system_time, local_file_time
' Convert it to a UTC time.
LocalFileTimeToFileTime local_file_time, utc_file_time
' Convert it to a SYSTEMTIME.
FileTimeToSystemTime utc_file_time, system_time
' Convert it to a Date.
SystemTimeToDate system_time, the_date
LocalTimeToUTC = the_date
End Function
' Convert a UTC time into local time.
Public Function UTCToLocalTime(ByVal the_date As Date) As _
Date
Dim system_time As SYSTEMTIME
Dim local_file_time As FILETIME
Dim utc_file_time As FILETIME
' Convert it into a SYSTEMTIME.
DateToSystemTime the_date, system_time
' Convert it to a UTC time.
SystemTimeToFileTime system_time, utc_file_time
' Convert it to a FILETIME.
FileTimeToLocalFileTime utc_file_time, local_file_time
' Convert it to a SYSTEMTIME.
FileTimeToSystemTime local_file_time, system_time
' Convert it to a Date.
SystemTimeToDate system_time, the_date
UTCToLocalTime = the_date
End Function
Public Function UTCToUnixTime(the_date As Date) As Long
UTCToUnixTime = CLng(DateDiff("s", #1/1/1970#, the_date))
End Function
Public Function UnixNow() As Long
UnixNow = UTCToUnixTime(LocalTimeToUTC(Now()))
End Function
Public Function LocalTimeToUnixTime(the_date As Date) As Long
LocalTimeToUnixTime = UTCToUnixTime(LocalTimeToUTC(the_date))
End Function