devxlogo

Determining time zone setting

Determining time zone setting

Question:
How can I find the Active Time Zone offset from UTC that the computer clock is set to? This value changes when going from Standard to Daylight Savings Time. I have looked in the Win.ini file and my API reference, but can find nothing.

Answer:
You can use the GetTimeZoneInformation API to determine these numbers. You’ll need to do some quick calculations, but all the data is available from this one call. Here’s enough to get you going:

Option ExplicitPrivate Declare Function GetTimeZoneInformation _   Lib "kernel32" (lpTimeZoneInformation As _   TIME_ZONE_INFORMATION) As LongPrivate 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 IntegerEnd TypePrivate Type TIME_ZONE_INFORMATION   Bias As Long   StandardName(0 To 63) As Byte   StandardDate As SYSTEMTIME   StandardBias As Long   DaylightName(0 To 63) As Byte   DaylightDate As SYSTEMTIME   DaylightBias As LongEnd TypePrivate Sub Form_Click()   Dim tz As TIME_ZONE_INFORMATION      Call GetTimeZoneInformation(tz)   Debug.Print "UTC Bias: "; tz.Bias / 60; " hrs."   Debug.Print " ST Date: "; _      Format(DateSerial(98, tz.StandardDate.wMonth, 1), "mmmm") & _      " " & tz.StandardDate.wDay   Debug.Print " ST Zone: "; CStr(tz.StandardName)   Debug.Print " ST Bias: "; tz.StandardBias; " mins."   Debug.Print " DT zone: "; CStr(tz.DaylightName)   Debug.Print " DT Date: "; _      Format(DateSerial(98, tz.DaylightDate.wMonth, 1), "mmmm") & _      " " & tz.DaylightDate.wDay   Debug.Print " DT Bias: "; tz.DaylightBias; " mins."End Sub

devx-admin

Share the Post: