+ Reply to Thread
Results 1 to 2 of 2

Daylight Savings Conversions Excel VBA

Hybrid View

  1. #1
    Registered User
    Join Date
    04-11-2011
    Location
    Los Angeles, CA
    MS-Off Ver
    Excel 2007
    Posts
    6

    Question Daylight Savings Conversions Excel VBA

    I have a worksheet that lists the times for numerous events in PT (not specified if DST or standard time). I have had a request to insert another column with GMT equivalents for each event. I can run the code where I specify the offset from PT but haven't figured out how to set it up automatically to check whether we are in standard or daylight savings time to correct the offset. I have created a table with the start and end dates for 2011 to 2015 but am not sure how to have it check the specified date to see if it falls in or out of that range or if there is a better way...it is not usually the system date but instead a date chosen by the user from a calendar control (called "DSSEDate" declared as date elsewhere in the code).

    Any thoughts?


    Thanks,
    Judy

  2. #2
    Forum Moderator Leith Ross's Avatar
    Join Date
    01-15-2005
    Location
    San Francisco, Ca
    MS-Off Ver
    2000, 2003, & 2010
    Posts
    23,259

    Re: Daylight Savings Conversions Excel VBA

    Hello JudyK,

    This macro (UDF) may help you. This will return the offset from local time to GMT correctly. It automatically checks the system to see if daylight savings time is active or not. Copy the code below into a VBA module in your workbook's VBA project.

    'Written: December 02, 2010
    'Author:  Leith Ross
    'Summary: Converts local time to UTC in minutes.
    '
    'All translations between UTC and local time are based on the following formula:
    '     UTC = local time + bias
    
    Private Type SYSTEMTIME
        Year As Long
        Month As Long
        DayOfWeek As Long
        Day As Long
        Hour As Long
        Minute As Long
        Second As Long
        Milliseconds As Long
    End Type
    
    Private Type TIME_ZONE_INFORMATION
        Bias As Long
        StandardName(32) As Integer
        StandardDate As SYSTEMTIME
        StandardBias As Long
        DaylightName(32) As Integer
        DaylightDate As SYSTEMTIME
        DaylightBias As Long
    End Type
    
    Private Declare Function GetTimeZoneInformation _
      Lib "kernel32.dll" _
        (ByRef lpTimeZoneInformation As TIME_ZONE_INFORMATION) _
      As Long
    
    Public Function GetTimeZoneBias() As Long
    
      Const TIME_ZONE_ID_INVALID = &HFFFFFFFF
      Const TIME_ZONE_ID_STANDARD = 1&
      Const TIME_ZONE_ID_UNKNOWN = 0&
      Const TIME_ZONE_ID_DAYLIGHT = 2&
        
      Dim TimeZoneInfo As TIME_ZONE_INFORMATION
      Dim lRet As Long
        
       'Get time zone info
        lRet = GetTimeZoneInformation(TimeZoneInfo)
        
       'Check if daylight savings time is in effect.
        If lRet = TIME_ZONE_ID_DAYLIGHT And TimeZoneInfo.DaylightDate.Month <> 0 Then
           GetTimeZoneBias = -TimeZoneInfo.Bias - TimeZoneInfo.DaylightBias * 60
        Else
           GetTimeZoneBias = -TimeZoneInfo.Bias
        End If
        
    End Function

    Macro Test Code
    Sub TestGetTimeZoneBias()
    
        MsgBox "Local Time is " & GetTimeZoneBias / 60 & " Hours GMT"
        
    End Sub

    Adding the Macro
    1. Copy the macro above pressing the keys CTRL+C
    2. Open your workbook
    3. Press the keys ALT+F11 to open the Visual Basic Editor
    4. Press the keys ALT+I to activate the Insert menu
    5. Press M to insert a Standard Module
    6. Paste the code by pressing the keys CTRL+V
    7. Make any custom changes to the macro if needed at this time.
    8. Save the Macro by pressing the keys CTRL+S
    9. Press the keys ALT+Q to exit the Editor, and return to Excel.
    Sincerely,
    Leith Ross

    Remember To Do the Following....

    1. Use code tags. Place [CODE] before the first line of code and [/CODE] after the last line of code.
    2. Thank those who have helped you by clicking the Star below the post.
    3. Please mark your post [SOLVED] if it has been answered satisfactorily.


    Old Scottish Proverb...
    Luathaid gu deanamh maille! (Rushing causes delays!)

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1