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.

LVL 1
Steve GronerLead Systems EngineerAsked:
Who is Participating?
 
Anthony PerkinsCommented:
So the function could be re-written as:

Function ConvUNIXTimeStamp(ByVal UNIXTimeStamp As Currency, ByVal TimeZone As Currency) As Date
Const UNIXDate = #1/1/70#

ConvUNIXTimeStamp = DateAdd("s", UNIXTimeStamp + (TimeZone * 60 * 60), UNIXDate)

End Function

Anthony
0
 
Anthony PerkinsCommented:
Function ConvUNIXTimeStamp(ByVal UNIXTimeStamp As Currency) As Date
Const UNIXDate = #1/1/70#

ConvUNIXTimeStamp = DateAdd("s", UNIXTimeStamp, UNIXDate)

End Function

? ConvUNIXTimeStamp(999719410.163)
9/5/01 7:50:10 PM

I suspect the differences have to to with TimeZones as in UTC.

Anthony
0
 
Steve GronerLead Systems EngineerAuthor Commented:
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)
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
Anthony PerkinsCommented:
This would depend on DST. Currently it is -7.

Anthony
0
 
Steve GronerLead Systems EngineerAuthor Commented:
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.
0
 
Brendt HessSenior DBACommented:
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


0
 
Anthony PerkinsCommented:
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
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.