How to check if date is summer time

Hi all,

Didn’t find anything online and here on discourse. So here is my my question.

How would I check if a date is summer or winter time?


Maybe you could base something on

TimeZones.next_transition_instant — Function.

next_transition_instant(zdt::ZonedDateTime) -> Union{ZonedDateTime, Nothing}
next_transition_instant(tz::TimeZone=localzone()) -> Union{ZonedDateTime, Nothing}

Determine the next instant at which a time zone transition occurs (typically due to daylight-savings time). If no there exists no future transition then nothing will be returned.

In many countries in Europe, Daylight Saving Time (DST) starts on the last Sunday in March and ends on the last Sunday in October. Using Dates and these rules one could implement:

using Dates
function isEuroDST(d::Date)
    d1 = tolast(Date(Year(d),Month(3)),  7, of=Month)    # last Sunday of March
    d2 = tolast(Date(Year(d),Month(10)), 7, of=Month)    # last Sunday of October
    return (d1 <= d < d2)

isEuroDST(Date("2022-03-26"))   # false
isEuroDST(Date("2023-03-26"))   # true
1 Like

I wrote that. It seems to work. What are your thoughts on adding this to the ZonedDateTime pkg?

using Dates
using TimeZones
const NY_TIMEZONE = tz"America/New_York"

function is_summer_time(date = now(UTC))::Bool
    year_start = ZonedDateTime(
    summer_time_start = TimeZones.next_transition_instant(year_start)
    summer_time_end = TimeZones.next_transition_instant(summer_time_start + Day(1))
    if date isa DateTime || date isa Date
        date = ZonedDateTime(date, NY_TIMEZONE)

    summer_time_start <= date < summer_time_end
1 Like

No idea, never used that package myself, but why not open an issue/file a PR there and see what they think?