This particular function just returns a descriptive string; but the UTC offset in hours or minutes is available in the code, too.
Note the use of WMI Script: Windows Management Interface is quite chewy, and bloggers like 'Hey Scripting Guy!' who can explain it well are few and far between. I don't generally use it unless I have to because it is effectively undocumented, and therefore best left to a community of experts who are immersed in the 'folklore' of code that you can only learn from mistakes and shared knowledge. That, and it's slow.
Public Function TimeZone() As String
Application.Volatile False
' returns a full descriptive string for the workstation's time zone
Dim objWMIService As Object
Dim objWin32_TimeZone As Object
Dim objWin32_ComputerSystem As Object
Dim strDescription As String
Dim strStandardName As String
Dim strDaylightName As String
Dim lngDaylightMins As Long
Dim lngUToffsetMins As Long
Dim boolDaylightInEffect As Boolean
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
For Each objWin32_TimeZone In objWMIService.ExecQuery("Select * from Win32_TimeZone")
strDescription = objWin32_TimeZone.Description
strStandardName = objWin32_TimeZone.StandardName
strDaylightName = objWin32_TimeZone.DaylightName
TimeZone = ""
lngDaylightMins = objWin32_TimeZone.DaylightBias
For Each objWin32_ComputerSystem In objWMIService.ExecQuery("Select * From Win32_ComputerSystem")
boolDaylightInEffect = objWin32_ComputerSystem.DaylightInEffect
lngUToffsetMins = objWin32_ComputerSystem.CurrentTimeZone
Next objWin32_ComputerSystem
If boolDaylightInEffect = False Then
TimeZone = strDescription & " (" & strStandardName & ")"
ElseIf lngDaylightMins = -60 Then
TimeZone = strDescription & " with daylight saving: '" & strDaylightName & "' as " & strStandardName & " + 1 hour"
ElseIf lngDaylightMins < 0 Then
TimeZone = strDescription & " with daylight saving: '" & strDaylightName & "' as " & strStandardName & " + " & -1 * lngDaylightMins / 60 & " hours"
ElseIf lngDaylightMins > 0 Then
TimeZone = strDescription & " with daylight saving: '" & strDaylightName & "' as " & strStandardName & " - " & lngDaylightMins / 60 & " hours"
ElseIf lngDaylightMins = 60 Then
TimeZone = strDescription & " with daylight saving: '" & strDaylightName & "' as " & strStandardName & " - 1 hour"
End If
If boolDaylightInEffect = False Then
' no further action: name is UTC
ElseIf lngUToffsetMins = 60 Then
TimeZone = "UTC + 1 hour" & ": " & TimeZone & ""
ElseIf lngUToffsetMins = -60 Then
TimeZone = "UTC - 1 hour" & ": " & TimeZone & ""
ElseIf lngUToffsetMins > 0 Then
TimeZone = "UTC + " & lngUToffsetMins / 60 & " hours" & ":" & TimeZone & ""
ElseIf lngUToffsetMins < 0 Then
TimeZone = "UTC - " & -1 * lngUToffsetMins / 60 & " hours" & ": " & TimeZone & ""
End If
Next
End Function
No comments:
Post a Comment