Public bug reported:
## Summary
In Ubuntu Noble (24.04) and Resolute (26.04), ICU timezone data was
split from `libicu74` into the separate `tzdata-icu` package.
However, `libicu74` does not depend on or recommend `tzdata-icu`. As a
result, installing `php-intl` can leave ICU using the timezone data that
was bundled when ICU was built.
This is easy to miss because the system `tzdata` package can be fully up
to date while ICU is using older timezone rules.
This differs from Jammy (22.04), where ICU timezone data was included in
`libicu70` and updated with the ICU package.
## Impact
Applications using ICU for timezone calculations can return incorrect
UTC offsets when timezone rules change after the ICU package was built.
For example, Alberta's 2026 change to permanent Daylight Time exposes
the issue. On an affected system:
- PHP `DateTime` uses the current system `tzdata` and returns UTC-6.
- PHP `IntlCalendar` / `IntlTimeZone` use ICU's stale data and return UTC-7.
This means the same timezone can produce different results depending on
whether the application uses PHP's standard timezone implementation or
ICU.
## Steps to reproduce
On a fresh Ubuntu 24.04 or 26.04 installation:
1. Install `php-intl`:
```
sudo apt install php8.3-intl
```
2. Verify that `tzdata-icu` is not installed:
```
dpkg -l | grep tzdata-icu
```
3. Run:
```
php -r '$tz="America/Edmonton"; $tzObj=new DateTimeZone($tz);
$cal=IntlCalendar::createInstance($tz);
foreach(["2026-10-31","2026-11-01","2026-11-02"] as $ds){$d=new
DateTime($ds."T12:00:00",$tzObj); $cal->setTime($d->getTimestamp()*1000);
$icu=($cal->get(IntlCalendar::FIELD_ZONE_OFFSET)+$cal->get(IntlCalendar::FIELD_DST_OFFSET))/1000;
echo "{$ds}: tzdata={$d->getOffset()}s icu={$icu}s
".($d->getOffset()==$icu?"MATCH":"MISMATCH")."\n";}'
```
On an affected system:
```
2026-10-31: tzdata=-21600s icu=-21600s MATCH
2026-11-01: tzdata=-21600s icu=-25200s MISMATCH
2026-11-02: tzdata=-21600s icu=-25200s MISMATCH
```
4. Install the missing package:
```
sudo apt install tzdata-icu
```
5. Run the test again:
```
2026-10-31: tzdata=-21600s icu=-21600s MATCH
2026-11-01: tzdata=-21600s icu=-21600s MATCH
2026-11-02: tzdata=-21600s icu=-21600s MATCH
```
Installing `tzdata-icu` fixes the mismatch without changing the ICU library.
## Environment
- Ubuntu 24.04.1 / 24.04.4 LTS
- Ubuntu 26.04 LTS (Resolute)
- `php-intl` / `php8.3-intl`
- arm64
- `tzdata-icu` not installed
The issue does not occur on Ubuntu 22.04. `tzdata-icu` does not exist there
because the ICU timezone data is still included in `libicu70`.
## Expected behavior
Installing `php-intl`, or any package that requires `libicu74`, should
result in ICU using current timezone data.
At minimum, `tzdata-icu` should be installed automatically for the normal `apt`
installation path.
## Suggested fix
Add `tzdata-icu` as a `Recommends` or `Depends` of `libicu74`.
`Recommends` would preserve the separation between the ICU library and
its timezone data while ensuring that a normal installation gets current
timezone data. `Depends` would provide stronger protection against
applications silently using stale data.
## Additional information
Debian Bug #2107950 discusses ICU timezone data lagging behind the
system `tzdata`. This report is different: on the affected Ubuntu
installations, `tzdata-icu` is **not installed at all** because nothing
pulls it in. Once the package is installed, the current archive data is
used correctly.
** Affects: icu (Ubuntu)
Importance: Undecided
Status: New
** Tags: icu tzdata
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2164793
Title:
libicu74/tzdata-icu package split leaves ICU using stale build-time
timezone data by default
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/icu/+bug/2164793/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs