"Erfindest du das Offset dann?"
Nö, mktime versucht es zu ermitteln. Wie schon gesagt, das funktioniert gut außer bei der Stunde Überlappung beim Übergang von Sommer- zu Winterzeit, die defaulted immer zum Offset der Winterzeit.

A negative value for tm_isdst causes mktime() to attempt to determine whether DST is in effect for the specified time.

Code:
  // 1 Stunde UTC-Offset für Winterzeit
  dsply timestampToISO8601(z'2021-01-01-14.00.00');

  // 2 Stunde UTC-Offset für Sommerzeit
  dsply timestampToISO8601(z'2021-08-01-14.00.00');
Das sollte auf einem System in der CET folgendes ausgeben:
Code:
DSPLY 2021-01-01T13:00:00Z
DSPLY 2021-08-01T12:00:00Z
Es wird also jeweils das richtige UTC Offset ermittelt.