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