From 71ad4869cea1792c405193b5d85e4f6984696e38 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Wed, 27 Dec 2023 16:25:54 +0100 Subject: [PATCH] fix: take into account hours when calculating a relative timezone dst --- winixd/core/timezone.cpp | 9 ++++++--- winixd/core/timezone.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/winixd/core/timezone.cpp b/winixd/core/timezone.cpp index 0ca2626..7f1a45f 100644 --- a/winixd/core/timezone.cpp +++ b/winixd/core/timezone.cpp @@ -66,13 +66,13 @@ int TimeZone::DstDate::Compare(const pt::Date & utc_date) const else if( date_type == first_weekday ) { - pt::Date tmp_date = CalculateRelativeDate(utc_date.year, date.month, true, weekday); + pt::Date tmp_date = CalculateRelativeDate(utc_date.year, date.month, true, weekday, date.hour, date.min, date.sec); res = tmp_date.Compare(utc_date, true); } else if( date_type == last_weekday ) { - pt::Date tmp_date = CalculateRelativeDate(utc_date.year, date.month, false, weekday); + pt::Date tmp_date = CalculateRelativeDate(utc_date.year, date.month, false, weekday, date.hour, date.min, date.sec); res = tmp_date.Compare(utc_date, true); } @@ -80,11 +80,14 @@ int TimeZone::DstDate::Compare(const pt::Date & utc_date) const } -pt::Date TimeZone::DstDate::CalculateRelativeDate(int year, int month, bool is_first, int weekday) +pt::Date TimeZone::DstDate::CalculateRelativeDate(int year, int month, bool is_first, int weekday, int hour, int min, int sec) { pt::Date new_date; new_date.year = year; new_date.month = month; + new_date.hour = hour; + new_date.min = min; + new_date.sec = sec; if( is_first ) { diff --git a/winixd/core/timezone.h b/winixd/core/timezone.h index 54a7489..af7f443 100644 --- a/winixd/core/timezone.h +++ b/winixd/core/timezone.h @@ -84,7 +84,7 @@ public: DstDate(); void Clear(); int Compare(const pt::Date & utc_date) const; - static pt::Date CalculateRelativeDate(int year, int month, bool is_first, int weekday); + static pt::Date CalculateRelativeDate(int year, int month, bool is_first, int weekday, int hour, int min, int sec); };