Consider this struct tm for in CET (Europe/Prague): tm_sec: 3 tm_min: 59 tm_hour: 1 tm_mday: 31 tm_mon: 2 tm_year: 124 tm_wday: 0 tm_yday: 90 tm_isdst: 0 Representing: 2024-03-31 01:59:02 Add a minute and call mktime (crossing DST boundary). Instead of getting: 2024-03-31 03:00:02 You get: 2024-03-31 01:00:02 tm_sec: 3 tm_min: 0 tm_hour: 1 tm_mday: 31 tm_mon: 2 tm_year: 124 tm_wday: 0 tm_yday: 90tm_isdst: 0 Not only We are going backwards, DST flag is not even set. Glibc behaves correctly: tm_sec: 3 tm_min: 0 tm_hour: 3 tm_mday: 31 tm_mon: 2 tm_year: 124 tm_wday: 0 tm_yday: 90tm_isdst: 1 tm_hour = 3 and tm_isdst = 1 This pretty messes with my cron tool that rely on mktime being able to correctly calculate struct tm after incrementing fields. AW