fix: take into account hours when calculating a relative timezone dst

This commit is contained in:
Tomasz Sowa 2023-12-27 16:25:54 +01:00
parent 09dc6782c8
commit 71ad4869ce
Signed by: tomasz.sowa
GPG Key ID: 662CC1438638588B
2 changed files with 7 additions and 4 deletions

View File

@ -66,13 +66,13 @@ int TimeZone::DstDate::Compare(const pt::Date & utc_date) const
else else
if( date_type == first_weekday ) 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); res = tmp_date.Compare(utc_date, true);
} }
else else
if( date_type == last_weekday ) 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); 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; pt::Date new_date;
new_date.year = year; new_date.year = year;
new_date.month = month; new_date.month = month;
new_date.hour = hour;
new_date.min = min;
new_date.sec = sec;
if( is_first ) if( is_first )
{ {

View File

@ -84,7 +84,7 @@ public:
DstDate(); DstDate();
void Clear(); void Clear();
int Compare(const pt::Date & utc_date) const; 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);
}; };