Dies ist zwar korrekt, hat aber keine Auswirkung auf die Steuerungswerte QTIME und QDATE oder die RPG-Funktionen TIME, %DATE und %TIME.

Hintergrund ist, dass durch die Locale eine ENVVAR "TIMZON" gesetzt wird.
Nur die C-Funktion localtime() liefert dann eine Zeitzonenzeit.
Genau ist das eigentlich:
long time() <= Liefert die GMT in Sekunden seit 1.1.1970, das ist QTIME um QUTCOFFSET verändert.
struct tm* localtime(time()) liefert dann die lokale Zeit entsprechend der ENVVAR TIMZON bzw. wenn diese fehlt wird QUTCOFFSET verwendet.

Leider ist tatsächlich nur die C-Umgebung Zeitzonensicher.

Alle Standardprogramme oder das DDS-Schlüsswort TIME liefern nur die Systemzeit.

Dein Problem kannst du also mit Standardmitteln nicht lösen.