<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/126476>126476</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            experimental chrono time zone support does not support DST changes when adding to local time
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          pauljohnston2009
      </td>
    </tr>
</table>

<pre>
    I've been using https://github.com/HowardHinnant/date for a while to handle time zones.
I've recently updated clang (19.1.7), and thought id switch out the date library for the std one.
I know the current features are still experimental, so this is possibly a known issue, though I could not find any similar issues.

I had to include "-fexperimental-library" compiler flags, so please close if this is a know issue, and not an oversight.

The issue is that a local time does not appear to be aware of its own timezone, so operations such as '+' do not work as expected.
tz->to_local() works fine, but trying to add to that (which crosses a DST change) does not consider the extra hour.

```
TEST(test_chrono_tz, london_dst_cross_add)
{
    using namespace std::chrono_literals;

    const auto tz = std::chrono::locate_zone("Europe/London");
    ASSERT_TRUE(tz != nullptr);

    // there is a DST change on March 30, 2025 for Europe/London
    // changes from 1:00 am to 2:00 am
    auto offset = 1h + 15min;
    auto start_time = std::chrono::sys_days(2025y / 3 / 30);

 auto utc_time_with_offset = start_time + offset;
    auto local_time_with_offset = tz->to_local(utc_time_with_offset);

    auto local_start_time = tz->to_local(start_time);
    auto local_time_with_offset_added_after = local_start_time + offset;

 EXPECT_EQ(local_time_with_offset, local_time_with_offset_added_after);

 const char* expected = "2025-03-30 02:15:00";
    EXPECT_EQ(expected, std::format("{:%F %T}", local_time_with_offset));
    EXPECT_EQ(expected, std::format("{:%F %T}", local_time_with_offset_added_after));
}
```

results in 

```
Expected equality of these values:
  local_time_with_offset
    Which is: 2025-03-30 02:15:00
  local_time_with_offset_added_after
    Which is: 2025-03-30 01:15:00

Expected equality of these values:
  expected
    Which is: "2025-03-30 02:15:00"
  std::format("{:%F %T}", local_time_with_offset_added_after)
    Which is: "2025-03-30 01:15:00"
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VkFvIrkS_jXmUgJ1u4GGAwcyAc1I70nvTVjt3lqmXY09Y-xe2x2G_PpVuTuQkElGe9iVooSYqq--r6rsKhGCPljEFZvdsdn9SHRROb9qRWe-OWVDdJZn2XK0d_K8-sJ4-YiwR7TQBW0PoGJsAyvWjG8Z3x50VN1-Ursj49vP7iS8_KytFTYyvpUiIjTOg4CT0gYhOlDCSvqkjwhPzmKYsGw9RPFYo43mDF1LrhJqI-wBGF_ky0k-KRlfMv4JhJUQlesOKoKWEE461gpcFyEqhBTU6L0X_pyC02GIEpzFFAu-W3dKp3XnPdoIDYrYeQwgPJlqYwB_tOj1EW0UhmIGB1HpADpA60LQe3MGkZAs6BA6JKOeFHyB2nVGgnURGm0lCHuGoI_aCN8bJ9GJixKSsqJtbTqJwDgfNy9jjwcljHOo3bHVBj00RhzCwKo1KAJCbVxA0M2FZU_uyo2SRoSEBfeIPuiDigOLncLejvyiEhEEGFcL01dJOgy9a9ui8ER3jyBOlCzXgI4BKAtkSwUdeLkWvYja2QChqxWIAIyXjN8xXoJ0CfDk_Hf6ggTXESXxiU9jVmyiqxIDxheML5NhoFwm9D1V2p-pGaMDIVMGE2_GFyelawW1dyFQQeH-YQe1EvaABHTRUjsbtMS-O_BH9AKU6_yQETbPhp9svds87BhfRAyxqpV31lXxiWgYZ6WzlaRzClcJKalDszUr71i2BoDhylhxxNCKOvUhXZ1iPSAZHdELE1hx10cmJ-IWQXSk6glYcX_r1n-mBEWs-pwvGOebzrsWGd_-JzFjnBOd4pnL-uFh83VX7b7-tiE9T8B4TuC2M6aN_mI7mPf3m_LjsW-oayrBWfiv8LWCIqNU8IzP0l27pfAKqvcN0Hh3hJwV6ywDcaTi8ed_Boek3TVNwJj05woYv4N8dtT2KihZhSh8rFKjvpupcA6VFOfA-IKYnokQFP3v7JXuBNnFOgFWJx1V9YLGy1j8biB4wye17c_d37T2zwLdluEF6I3UN3DX71_V_QNa1LIoK9FE9AnzbaAbnYS5-eN_m0-7avN_xhc_x-2vx68ivpLaN32thGd8fXkREinGOZVtnBXjIoOMmiWfpY6hFr_ofEnr2T89Rs8t0Th_FLG_K3RFaYbNtsD4bMfK-3Rd3qOdJs_y34l1m6JLlsr7m6eJZWuPoTMxgLbw9unaPGcR_-yE0fFM73VUGBAehekwjXES9I7oXuvv6UXVZAzv1eF9kFdqPgbMXwH-Hf6XErwN8HHzkP0_UbNf8shveVzqNpKrQi6LpRjhKi-LZV7m89l8pFb1XpT1dDpdNovpDLls5mVT8GxaF_V8ueTlSK8oQsbzLCvzaT6f5LN9uVhysdyXKOS8YdMMj0KbiTGPx4nzh1Ea-6ucz6flfGTEHk1IayHnFi_LA6ct0a_IabzvDoFNM6NDDFeYqKPB1cu9Bfr397rnQeja1vl4HcHPB9exEuCk0NJEH2b7dQsZdd6sPlg9icrwZ9x69w1rWkD7ZYvx7aDwccX_CgAA__97hHd6">