Help With Understanding the Binary Files

Guy Harris guy at alum.mit.edu
Wed Dec 9 18:56:52 UTC 2009


On Dec 9, 2009, at 10:15 AM, Bill Seymour wrote:

> I was NOT asking about the number of local time types.

You were asking what the index was.  I was indicating how you can  
infer, from what tzfile.h says, that "indexed by type" does, in fact,  
mean "having the same index as the type"; that inference involves  
knowing that noticing that tzh_typecnt is the number of local time  
types.

I also indicated that the tzfile man page could also be used; it says

      Then there are tzh_ttisstdcnt standard/wall indicators, each  
stored as a
      one-byte value; they tell whether the transition times  
associated with
      local time types were specified as standard time or wall clock  
time, and
      are used when a time zone file is used in handling POSIX-style  
time zone
      environment variables.

      Finally there are tzh_ttisgmtcnt UTC/local indicators, each  
stored as a
      one-byte value; they tell whether the transition times  
associated with
      local time types were specified as UTC or local time, and are  
used when a
      time zone file is used in handling POSIX-style time zone  
environment
      variables.

but that's unfortunately incomplete.  In fact, tzh_ttisstdcnt and  
tzh_ttisgmtcnt must either be zero or equal to tzh_typecnt (this is  
enforced by the code that reads the file).  If tzh_ttisstdcnt is zero,  
the array is implicitly "all specified as wall-clock time"; if  
tzh_ttisgmtcnt is zero, the array is implicitly "all specified as  
local time".

> I was NOT asking about the difference between standard time and DST.

You said

>>> If so, how do I calculate standard time while
>>> DST is being observed

If by "how do I calculate standard time while DST is being observed"  
you mean that you have a time_t value and you want to find out, within  
a given time zone, what the time would be if DST *weren't* being  
observed, that means that you need the time zone offset for the first  
entry before the current entry that is an entry for standard time  
rather than DST (which, contrary to my previous mail, isn't  
*necessarily* the previous entry, as there's no guarantee that the  
previous entry won't be for DST as well - unlikely, but not impossible).

> I was NOT asking how to make POSIX TZ strings.

You were asking what "are used when a time zone file is used in  
handling POSIX-style time zone environment variables" means, and I was  
explaining under what circumstances a time zone file is used in  
handling POSIX-style time zone environment variables - it's used when  
a POSIX TZ string doesn't give any rules.  I gave the information of  
what a "rule" is to clarify what "doesn't give any rules" means - a  
string such as "EST5EDT" doesn't give any rules.

That also means that the Booleans are not used for time zone files  
other than the posixrules file.  It does *not* mean that, in all  
cases, the transition times are the ones in the TZ variable; the only  
time when the transition times are the ones in the TZ variable is when  
the TZ variable includes a rule or rules, not when it refers to a file  
or when it has a setting such as "PST8PDT" with no rules.



More information about the tz mailing list