excelvbafunctioncode-snippetsdst

How do you determine Daylight Savings Time in VBA?


What function will let us know whether a date in VBA is in DST or not?


Solution

  • For non-current dates (DST 2007+):

    First, you need a function to find the number of specific weekdays in a month:

    Public Function NDow(Y As Integer, M As Integer, _
                    N As Integer, DOW As Integer) As Date  
    
    ' Returns Date of Nth Day of the Week in Month  
    
    NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
                  (DOW + 1) Mod 8)) + ((N - 1) * 7))  
    
    End Function  
    

    Then, you can check for the DST day versus the following function calls:

    Fall: NDow(Year(newdate), 11, 1, 1)
    Spring: NDow(Year(newdate), 3, 2, 1)

    For the current date:

    Call the Windows API function GetTimeZoneInformation, and it will return an enum (integer) with the status.

    I got the code for this from Chip Pearson's great Excel site.

    Pearson's site