Visual Basic Locale/Regionalization Routines
GetTimeZoneInformation: Current, Standard and Daylight Bias
     
Posted:   Sunday April 08, 2001
Updated:   Monday December 26, 2011
     
Applies to:   VB4-32, VB5, VB6
Developed with:   VB5, Windows 2000
OS restrictions:   None
Author:   VBnet - Randy Birch, Chip Pearson, Bob Butler
     

Related:  

GetTimeZoneInformation: Determine when Daylight Saving Time Occurs
GetTimeZoneInformation: Locale Standard and Daylight Time Zone Names
GetTimeZoneInformation: Obtain Dates for Daylight and Standard Time Changes
     
 Prerequisites
None.

This demo presents five functions that return various time-related information with regard to the differences between a user's local machine time and Greenwich Mean Time (GMT), in Windows called the Coordinated Universal Time (UTC).

The return value from a call to GetTimeZoneInformation indicates whether the local system is running under Standard Time or Daylight Saving Time, and the call's TIME_ZONE_INFORMATION structure contains details of the local time in relation to GMT. The code here uses the GetCurrentTimeZone function to return the name of the zone (shown in Text1), and introduces the functions GetCurrentTimeBias (Text2),  GetCurrentGMTDate (Text3), GetStandardTimeBias (Text4) and GetDaylightTimeBias (Text5).

This code is based on newsgroup postings by Bob Butler and Excel MVP Chip Pearson.

 BAS Module Code
None.

 Form Code
Add a label (Label1) for the current date, a command button (Command1) and five text boxes (Text1- Text5) . Other labels are optional. Add the following code:

Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright 1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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 63) As Byte  'unicode (0-based)
   StandardDate As SYSTEMTIME
   StandardBias As Long
   DaylightName(0 To 63) As Byte  'unicode (0-based)
   DaylightDate As SYSTEMTIME
   DaylightBias As Long
End Type

Private Declare Function GetTimeZoneInformation Lib "kernel32" _
    (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long



Private Sub Form_Load()

   Command1.Caption = "Get Time Zone Bias"
   
End Sub


Private Sub Command1_Click()

   Label1.Caption = Format$(Now, "dddd mmm dd, yyyy hh:mm:ss am/pm")
   
   Text1.Text = GetCurrentTimeZone()
   Text2.Text = GetCurrentTimeBias()
   Text3.Text = GetCurrentGMTDate()
   
   Text4.Text = GetStandardTimeBias()
   Text5.Text = GetDaylightTimeBias()

End Sub


Private Function GetDaylightTimeBias() As String

   Dim tzi As TIME_ZONE_INFORMATION
   Dim dwBias As Long
   Dim tmp As String

   Call GetTimeZoneInformation(tzi)
   
   dwBias = tzi.Bias + tzi.DaylightBias
   tmp = CStr(dwBias \ 60) & " hours, " & CStr(dwBias Mod 60) & " minutes"

   GetDaylightTimeBias = tmp

End Function


Private Function GetStandardTimeBias() As String

   Dim tzi As TIME_ZONE_INFORMATION
   Dim dwBias As Long
   Dim tmp As String

   Call GetTimeZoneInformation(tzi)

   dwBias = tzi.Bias + tzi.StandardBias
   tmp = CStr(dwBias \ 60) & " hours, " & CStr(dwBias Mod 60) & " minutes"
   
   GetStandardTimeBias = tmp

End Function


Private Function GetCurrentTimeBias() As String

   Dim tzi As TIME_ZONE_INFORMATION
   Dim dwBias As Long
   Dim tmp As String

   Select Case GetTimeZoneInformation(tzi)
   Case TIME_ZONE_ID_DAYLIGHT
      dwBias = tzi.Bias + tzi.DaylightBias
   Case Else
      dwBias = tzi.Bias + tzi.StandardBias
   End Select

   tmp = CStr(dwBias \ 60) & " hours, " & CStr(dwBias Mod 60) & " minutes"

   GetCurrentTimeBias = tmp
   
End Function


Private Function GetCurrentGMTDate() As String

   Dim tzi As TIME_ZONE_INFORMATION
   Dim gmt As Date
   Dim dwBias As Long
   Dim tmp As String

   Select Case GetTimeZoneInformation(tzi)
   Case TIME_ZONE_ID_DAYLIGHT
      dwBias = tzi.Bias + tzi.DaylightBias
   Case Else
      dwBias = tzi.Bias + tzi.StandardBias
   End Select

   gmt = DateAdd("n", dwBias, Now)
   tmp = Format$(gmt, "dddd mmm dd, yyyy hh:mm:ss am/pm")

   GetCurrentGMTDate = tmp

End Function


Private Function GetCurrentTimeZone() As String

   Dim tzi As TIME_ZONE_INFORMATION
   Dim tmp As String

   Select Case GetTimeZoneInformation(tzi)
      Case 0:  tmp = "Cannot determine current time zone"
      Case 1:  tmp = tzi.StandardName
      Case 2:  tmp = tzi.DaylightName
   End Select
   
   GetCurrentTimeZone = TrimNull(tmp)
   
End Function


Private Function TrimNull(item As String)

    Dim pos As Integer
   
   'double check that there is a chr$(0) in the string  
    pos = InStr(item, Chr$(0))      
    If pos Then
       TrimNull = Left$(item, pos - 1)
    Else
       TrimNull = item
    End If
  
End Function
 Comments

 
 

PayPal Link
Make payments with PayPal - it's fast, free and secure!

 
 
 
 

Copyright 1996-2011 VBnet and Randy Birch. All Rights Reserved.
Terms of Use  |  Your Privacy

 

Hit Counter