Annotation of 43BSDTahoe/etc/tzone/Theory, revision 1.1.1.1

1.1       root        1: @(#)Theory     3.1
                      2: 
                      3: These time and date functions are much like the System V Release 2.0 (SVR2)
                      4: time and date functions; there are a few additions and changes to extend
                      5: the usefulness of the SVR2 functions:
                      6: 
                      7: *      In SVR2, time display in a process is controlled by the environment
                      8:        variable TZ, which "must be a three-letter time zone name, followed
                      9:        by a number representing the difference between local time and
                     10:        Greenwich Mean Time in hours, followed by an optional three-letter
                     11:        name for a daylight time zone;" when the optional daylight time zone is
                     12:        present, "standard U.S.A. Daylight Savings Time conversion is applied."
                     13:        This means that SVR2 can't deal with other (for example, Australian) 
                     14:        daylight savings time rules, or situations where more than two
                     15:        time zone abbreviations are used in an area.
                     16: 
                     17: *      In SVR2, time conversion information is compiled into each program
                     18:        that does time conversion.  This means that when time conversion
                     19:        rules change (as in the United States in 1987), all programs that
                     20:        do time conversion must be recompiled to ensure proper results.
                     21: 
                     22: *      In SVR2, time conversion fails for near-minimum or near-maximum
                     23:        time_t values when doing conversions for places that don't use GMT.
                     24: 
                     25: *      In SVR2, there's no tamper-proof way for a process to learn the
                     26:        system's best idea of local wall clock.  (This is important for 
                     27:        applications that an administrator wants used only at certain times--
                     28:        without regard to whether the user has fiddled the "TZ" environment
                     29:        variable.  While an administrator can "do everything in GMT" to get
                     30:        around the problem, doing so is inconvenient and precludes handling
                     31:        daylight savings time shifts--as might be required to limit phone
                     32:        calls to off-peak hours.)
                     33: 
                     34: These are the changes that have been made to the SVR2 functions:
                     35: 
                     36: *      The "TZ" environment variable is used in generating the name of a file
                     37:        from which time zone information is read; "TZ" is no longer constrained
                     38:        to be a three-letter time zone name followed by a number of hours and
                     39:        an optional three-letter daylight time zone name.  The daylight saving
                     40:        time rules to be used for a particular time zone are encoded in the
                     41:        time zone file; the format of the file allows U.S., Australian, and
                     42:        other rules to be encoded, and allows for situations where more than
                     43:        two time zone abbreviations are used.
                     44: 
                     45:        It was recognized that allowing the "TZ" environment variable to
                     46:        take on values such as "US/Eastern" might cause "old" programs
                     47:        (that expect "TZ" to have a certain form) to operate incorrectly;
                     48:        consideration was given to using some other environment variable
                     49:        (for example, "TIMEZONE") to hold the string used to generate the
                     50:        time zone information file name.  In the end, however, it was decided
                     51:        to continue using "TZ":  it is widely used for time zone purposes;
                     52:        separately maintaining both "TZ" and "TIMEZONE" seemed a nuisance;
                     53:        and systems where "new" forms of "TZ" might cause problems can simply
                     54:        give time zone files names such as "EST5EDT" which can be used both by
                     55:        "new" programs (as file names) and "old" programs (as zone names and
                     56:        offsets).
                     57: 
                     58: *      To handle places where more than two time zone abbreviations are used,
                     59:        the functions "localtime" and "gmtime" set tzname[tmp->tm_isdst]
                     60:        (where "tmp" is the value the function returns) to the time zone
                     61:        abbreviation to be used.  This differs from SVR2, where the elements
                     62:        of tzname are only changed as a result of calls to tzset.
                     63: 
                     64: *      Since the "TZ" environment variable can now be used to control time
                     65:        conversion, the "daylight" and "timezone" variables are no longer
                     66:        needed or supported.  (You can use a compile-time option to cause
                     67:        these variables to be defined and to be set by "tzset"; however, their
                     68:        values will not be used by "localtime.")
                     69: 
                     70: *      The "localtime" function has been set up to deliver correct results
                     71:        for near-minimum or near-maximum time_t values.  (A comment in the
                     72:        source code tells how to get compatibly wrong results).
                     73: 
                     74: *      A function "tzsetwall" has been added to arrange for the system's
                     75:        best approximation to local wall clock time to be delivered by
                     76:        subsequent calls to "localtime."  Source code for portable
                     77:        applications that "must" run on local wall clock time should call
                     78:        "tzsetwall();" if such code is moved to "old" systems that don't provide
                     79:        tzsetwall, you won't be able to generate an executable program.
                     80:        (These time zone functions also arrange for local wall clock time to be
                     81:        used if tzset is called--directly or indirectly--and there's no "TZ"
                     82:        environment variable; portable applications should not, however, rely
                     83:        on this behavior since it's not the way SVR2 systems behave.)
                     84: 
                     85: Points of interest to folks with Version 7 or BSD systems:
                     86: 
                     87: *      The BSD "timezone" function is not present in this package;
                     88:        it's impossible to reliably map timezone's arguments (a "minutes west
                     89:        of GMT" value and a "daylight saving time in effect" flag) to a
                     90:        time zone abbreviation, and we refuse to guess. 
                     91:        Programs that in the past used the timezone function may now examine
                     92:        tzname[localtime(&clock)->tm_isdst] to learn the correct time
                     93:        zone abbreviation to use.  Alternatively, use localtime(&clock)->tm_zone
                     94:        if this has been enabled.
                     95: 
                     96: *      The BSD gettimeofday function is not used in this package;
                     97:        this lets users control the time zone used in doing time conversions.
                     98:        Users who don't try to control things (that is, users who do not set
                     99:        the environment variable TZ) get the time conversion specified in the
                    100:        file "/etc/zoneinfo/localtime"; see the time zone compiler writeup for
                    101:        information on how to initialize this file.
                    102: 
                    103: *      The BSD "dysize" function is only included if the preprocessor symbol
                    104:        BSD_COMPAT is defined.  For a year y, the BSD code returns the value
                    105:           ((y % 4) == 0) : 366 : 365
                    106:        while this code returns the value
                    107:           (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0) ? 366 : 365
                    108:        There's a comment in the code telling how to get the BSD value.
                    109: 
                    110: The functions that are conditionally compiled if STD_INSPIRED is defined should,
                    111: at this point, be looked on primarily as food for thought.  They are not in
                    112: any sense "standard compatible"--some are not, in fact, specified in *any*
                    113: standard.  They do, however, represent responses of various authors to
                    114: standardization proposals.
                    115: 
                    116: Other time conversion proposals, in particular the one developed by folks at
                    117: Hewlett Packard, offer a wider selection of functions that provide capabilities
                    118: beyond those provided here.  The absence of such functions from this package
                    119: is not meant to discourage the development, standardization, or use of such
                    120: functions.  Rather, their absence reflects the decision to make this package
                    121: close to SVR2 (with the exceptions outlined above) to ensure its broad
                    122: acceptability.  If more powerful time conversion functions can be standardized,
                    123: so much the better.
                    124: 
                    125: It's probably not wise to standardize everything in this package.
                    126: While the command
                    127:        nroff -man newctime.3
                    128: produces a document that describes this package, the command
                    129:        nroff -man -rX3J11 newctime.3
                    130: produces a document that describes the "standardizable" parts.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.