Tried to set tm_isdst to 0 and 1. With glibc and tzcode strftime
the result is the same, they print +0000. MacOs works as
expected - it prints standard and DST offsets.
Though when I set it to -1 both glibc and MacOs just skip
%z. tzcode's implementation replaces %z with +0000 in that
case.

On Mon, 18 Jul 2022 at 11:04, Michael H Deckers <michael.h.deckers@googlemail.com> wrote:

On 2022-07-18 09:34, Almaz Mingaleev via tz wrote:
> Setting tm_gmtoff "fixes" it.



     According to page 366 in the newest C draft standard at
[https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2912.pdf],
     strftime() looks at the member .tm_isdst for the format patterns
     %z and %Z; but this member was not initialized and is therefore
     "indeterminate", so that the result produced by strftime() may
     be "unspecified".

     By the way, the draft standard seems to be defective in that
     it does not state that strftime() also looks at the members
     .tm_year, .tm_mon, tm_mday, .tm_hour, .tm_min, .tm_sec
     for printing %z or %Z -- one cannot determine the offset
     or the time zone abbreviation without knowing the timestamp.

     Michael Deckers.