Browse Source

time_zone: Account for leap years

Protects against invalid hour offsets during transitions to years
following leap years.
nce_cpp
lat9nq 2 years ago
parent
commit
9fde7a84ea
  1. 4
      src/common/time_zone.cpp

4
src/common/time_zone.cpp

@ -35,8 +35,10 @@ std::string GetDefaultTimeZone() {
// Results are not comparable to seconds since Epoch
static std::time_t TmSpecToSeconds(const struct std::tm& spec) {
const int year = spec.tm_year - 1; // Years up to now
const int leap_years = year / 4 - year / 100;
std::time_t cumulative = spec.tm_year;
cumulative = cumulative * 365 + spec.tm_yday; // Years to days
cumulative = cumulative * 365 + leap_years + spec.tm_yday; // Years to days
cumulative = cumulative * 24 + spec.tm_hour; // Days to hours
cumulative = cumulative * 60 + spec.tm_min; // Hours to minutes
cumulative = cumulative * 60 + spec.tm_sec; // Minutes to seconds

Loading…
Cancel
Save