Daylight Time Survey Summary
Moderator, John Quarterman
std-unix at ut-sally.UUCP
Fri Mar 7 03:12:15 AEST 1986
Date: Tue, 4 Mar 86 16:02:04 PST
From: Snoopy <seifert%hammer.uucp at CSNET-RELAY.ARPA>
Once upon a time, I posted a survey, asking which method people
would prefer for allowing a user to override the system default
timezone. I suggested a ~/.daterc file, and/or environment variables.
I received 15 replies. The summary of votes is:
environment variables - 4 votes
either - 3 votes
"not ~/.daterc" - 1 vote
use GMT for everything - 1 vote
"take it out of the kernel and put it in libc" - 1 vote
other - 1 vote
misunderstandings - 4 (at least)
A number of people were concerned with performance, since lots of
programs use timestamps. They were concerned that opening a file
would slow things down.
Some selected replies, edited for brevity:
------------------------------------
From: ihnp4!cbosgd!cbpavo.cbosgd.ATT.UUCP!mark
System V has a default (which always
seems to be the time zone of the developers of the system, so that
the developers will never find any bugs that only show up in non-default
time zones) and overrides it with the TZ environment variable. This
has some horrible properties:
(1) People who don't use the Bourne shell, and hence don't source
/etc/profile, don't get a TZ. This includes csh and uucico.
(2) Programs run from crontab don't get a TZ.
(3) Programs run single user don't get a TZ.
(4) An individual can change his TZ to defraud the system. For
example, a UUCP L.sys may restrict a certain long distance
call to night hours, but by setting your time zone to some
far off part of the world, you can dial out during the day.
[...]
(1) "time right now" must be fast for logging
(2) "time of some date this year" should be reasonably fast for ls -l.
(3) "time of some date some previous year" can be slow.
Mark
----------------------------------
From: hp-pcd!hp-sdd!sdcsvax!bmcg!asgb!devine
My choice looks like:
$TZ=MST-7 # name of timezone and difference from Univeral Time
$DST=1 # how much to adjust for DST; ==0 if no DST is used
$DST_START=(when daylight saving starts)
$DST_STOP=(when daylight saving stops)
Bob Devine
Burroughs / Boulder, CO.
-------------------------------
From: sequent!riacs!seismo!ut-sally!cyb-eng!howard
Whatever happened to the concepts of dynamic linking, true interprocess
communication, and "lightweight processes"? If your operating system
is frozen or hostile and you care about D.S.T., then dynamically loading
a library module might be appropriate. If the o.s. is frozen/hostile and
you don't care, use something like "/etc/daterc" which can be overridden
by $TZ. If you're writing/modifying an o.s., consider dynamically-loaded,
reentrant library routines and memory management hardware to support it.
Of course, a more practical o.s. approach would be to have a date server:
just set up a socket to your favorite date-server port and go get it.
------------------------------------
From: tektronix!allegra!clyde!watmath!utzoo!ecrhub!ecr1!peterc
In studying this problem a while ago, I found I needed three environment
variables. They could have been encoded into one, of course, but that
makes it harder for the user to set up right. I found the following
were necessary:
TIMEZONE: a comma-separated list of the time zones that apply.
e.g. TIMEZONE=EST,EDT
TIMEDIFF: a comma-separated list of the number of minutes west of GMT (east if
negative) the corresponding time zone is.
e.g. TIMEZONE=480,540
TIMECHG: a comma-separated list of the dates on which time changes occur.
It is assumed that at midnight on January 1st each year, we
are in the initial time zone (e.g. EST), and then progress
through the others in sequence, then backwards to the original.
The time change dates are specified in the form
mm/dd+n
where "mm" is the month (1-12), "dd" is the day (1-31), and
the "+n" (or "-n") causes that date to be moved forward
(backward) to the appropriate day of the week (e.g. 4/24+0
means the first Sunday on or after April 24th).
I prefer environment variables for reasons of speed. However, the current
UNIX scheme is not adequate, for several reasons:
- it does not provide the flexibility needed, because everything
is hard-coded.
- it does not satisfy the real-world requirements. In particular,
it does not take into account things like the double
daylight savings time used in much of Europe.
Even the scheme I propose here is not really adequate, because it only accounts
for the current year, which may not be suitable for other years. A more general
scheme could be built by adding special cases for unusual years:
TIMECHG=4/24+0,10/25+0;1974-1975:.....;.....
I.e. make the first set of values (up to the first ';') the rule that applies
in the current year, and any other unspecified year. Then add special cases
for other years.
All this starts to get complex, ugly and unpleasant to set up and program.
That is the way it is. Sir Stanford Fleming established a wonderful system
when he defined Standard Time. I hope he didn't expect it to stay that way.
------------------------------
This is getting prettty long, so I'll describe what I'm actually doing in
a future article.
Snoopy
tektronix!tekecs!doghouse.TEK!snoopy
Volume-Number: Volume 5, Number 66
More information about the Mod.std.unix
mailing list