https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116110

            Bug ID: 116110
           Summary: Transitions obtained from chrono::time_zone::get_info
                    should not treat times as UTC
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

#include <chrono>
#include <print>

int main()
{
    using namespace std::chrono;
    sys_days date(2014y/December/21);
    auto zone = locate_zone("Asia/Bishkek");
    auto info = zone->get_info(date);
    zoned_time local(zone, info.begin);
    std::println("{}: {}", zone->name(), local);
}

This prints:

Asia/Bishkek: 2005-08-12 06:00:00 +06

But the transition should be at midnight local time, not midnight UTC.

I noted this in the source:

    // XXX The ri.until() time point should be
    // "interpreted using the rules in effect just before the transition"
    info.end = ri.until();


          // XXX UNTIL field should be interpreted
          // "using the rules in effect just before the transition"
          // so might need to store as year_month_day and hh_mm_ss and only
          // convert to a sys_time once we know the offset in effect.
          inf.m_until = sys_days(year(y)/m.m/day(d)) + seconds(t.time);

Reply via email to