Steve Groner
asked on
Convert Unix Timestamp into local date and time
I need to convert the following using visual basic:
UNIX Timestamp: 999719410.163
Result: Wed Sep 5 12:50:10 2001
Can someone please send me a function to do this.
Thanks in advance.
UNIX Timestamp: 999719410.163
Result: Wed Sep 5 12:50:10 2001
Can someone please send me a function to do this.
Thanks in advance.
ASKER
Close, but how do you allow for the current time zone change from where I am compared to UTC, I am in Southern California (PDT)
This would depend on DST. Currently it is -7.
Anthony
Anthony
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you very much, I had already insert that, but was wondering if there was a way to automatically grab the timezone from the machine I am using.
To get the current locale's bias based on GMT and the computer's settings, try this:
First, add this information to a module:
Private Const TIME_ZONE_ID_UNKNOWN As Long = 1
Private Const TIME_ZONE_ID_STANDARD As Long = 1
Private Const TIME_ZONE_ID_DAYLIGHT As Long = 2
Private Const TIME_ZONE_ID_INVALID As Long = &HFFFFFFFF
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 Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(0 To ((32 * 2) - 1)) As Byte 'unicode
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(0 To ((32 * 2) - 1)) As Byte 'unicode
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Then, add this function:
Private Function ConvertUnixTimestampToGMT( ByVal UnixTimeStamp As Currency) As Date
Const UnixBaseDate = #01/01/1970#
Dim tzi As TIME_ZONE_INFORMATION
Dim dwBias As Long
Select Case GetTimeZoneInformation(tzi )
Case TIME_ZONE_ID_DAYLIGHT:
dwBias = tzi.Bias + tzi.DaylightBias
Case Else: dwBias = tzi.Bias + tzi.StandardBias
End Select
GetCurrentTimeBias = DateAdd("n", -dwBias, DateAdd("s",UnixTimeStamp, UnixBaseDate))
End Function
First, add this information to a module:
Private Const TIME_ZONE_ID_UNKNOWN As Long = 1
Private Const TIME_ZONE_ID_STANDARD As Long = 1
Private Const TIME_ZONE_ID_DAYLIGHT As Long = 2
Private Const TIME_ZONE_ID_INVALID As Long = &HFFFFFFFF
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 Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(0 To ((32 * 2) - 1)) As Byte 'unicode
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(0 To ((32 * 2) - 1)) As Byte 'unicode
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Then, add this function:
Private Function ConvertUnixTimestampToGMT(
Const UnixBaseDate = #01/01/1970#
Dim tzi As TIME_ZONE_INFORMATION
Dim dwBias As Long
Select Case GetTimeZoneInformation(tzi
Case TIME_ZONE_ID_DAYLIGHT:
dwBias = tzi.Bias + tzi.DaylightBias
Case Else: dwBias = tzi.Bias + tzi.StandardBias
End Select
GetCurrentTimeBias = DateAdd("n", -dwBias, DateAdd("s",UnixTimeStamp,
End Function
The following function will give you the difference in time from the workstation you are using (providing it is set correctly in the Control Panel!). By the way, my use of the Currency data type has to do with the fact that some timezones are in fractions. i.e +8.5. If this is never going to be your case than change to integer.
Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(63) As Byte
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(63) As Byte
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Declare Function GetTimeZoneInformation Lib "kernel32" _
(lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Function GetCurrentTimeBias() As Currency
Const TIME_ZONE_ID_DAYLIGHT As Long = 2
Dim tzi As TIME_ZONE_INFORMATION
Dim dwBias As Long
If GetTimeZoneInformation(tzi ) = TIME_ZONE_ID_DAYLIGHT Then
dwBias = tzi.Bias + tzi.DaylightBias
Else
dwBias = tzi.Bias + tzi.StandardBias
End If
GetCurrentTimeBias = dwBias / 60
End Function
Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(63) As Byte
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(63) As Byte
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Declare Function GetTimeZoneInformation Lib "kernel32" _
(lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Function GetCurrentTimeBias() As Currency
Const TIME_ZONE_ID_DAYLIGHT As Long = 2
Dim tzi As TIME_ZONE_INFORMATION
Dim dwBias As Long
If GetTimeZoneInformation(tzi
dwBias = tzi.Bias + tzi.DaylightBias
Else
dwBias = tzi.Bias + tzi.StandardBias
End If
GetCurrentTimeBias = dwBias / 60
End Function
Const UNIXDate = #1/1/70#
ConvUNIXTimeStamp = DateAdd("s", UNIXTimeStamp, UNIXDate)
End Function
? ConvUNIXTimeStamp(99971941
9/5/01 7:50:10 PM
I suspect the differences have to to with TimeZones as in UTC.
Anthony