home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / std_unix / moretz < prev    next >
Internet Message Format  |  1988-02-09  |  45KB

  1. From news  Mon Sep 29 13:52:45 1986
  2. From: std-unix%ut-sally.UUCP@sally.utexas.edu (Moderator, John Quarterman)
  3. Newsgroups: mod.std.unix
  4. Subject: Summary of Volume 6 of mod.std.unix
  5. Message-Id: <5835@ut-sally.UUCP>
  6. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  7. Date: 29 Sep 86 18:52:17 GMT
  8. Draft-9: mod.std.unix
  9. Status: R
  10.  
  11. Administrativia:    N1, N13b, N51
  12. mod.std.unix & P1003:    N2
  13. Publicity:        N6
  14. Access to standards:  N7, N10, N11, N12, N13a, N21, N22, N26, N27, N40, N46, N50
  15. Access to user groups and publications:  N11, N21, N40, N45
  16. POSIX Conformance Workshop:    N20
  17. P1003.2 Shell Working Group:    N24, N25 (Hal Jespersen)
  18. IEEE 1003.1, POSIX, & ISO/TC97:    N49 (Isaak)
  19. RFCs:            N16 (jbc, jsq)
  20.  
  21. write EOF:        N5, N8, N9
  22. tape file marks:    N14
  23. ioctl vs. iocntl (and fcntl):  N15 (Smith, jbc), N17 (jbc), N18 (rbj), N19 (dag)
  24. mkdir & rmdir implementation:  N23 (jsq, dag), N28 (dag)
  25.  
  26. Timezones:
  27.     motivation:  N3 (Horton); location:  N4 (dag);  past:  N4 (jsq)
  28.  
  29. RFC.001:  Timezones:  N29 (jsq)
  30.     RFC.001 Summary of mod.std.unix Volume 5:  N30 (jsq)
  31.     RFC.001 Timezone Interface:  N31 (Elz)
  32.     RFC.001 Timezone Examples:  N32 (Olsen)
  33.     RFC.001 Timezone Proposal:  N33 (jsq)
  34.  
  35. Responses to RFC.001:
  36.     Previous call on settz():  N34 (Noel), N36 (Elz)       (perhaps add)
  37.     Implementor's TZ a bad default:  N34 (Noel), N36 (Elz)          (add note)
  38.     Method to retrieve TZ name:  N34 (Noel), N36 (Elz)      (not tzname[])
  39.     BSD timezone():  N34 (Noel)
  40.     tzset() of System V:  N34 (Noel), N36 (Elz)      (implement, don't add)
  41.     TZ & DST rule:  N34 (Noel), N35 (Horton), N36 (Elz)(can't be done right)
  42.     Details of Olsen's implementation:  N37 (Devine)
  43. The parenthetical comments at the far right indicate my interpretation
  44. of the outcome of the discussions on the various topics and what I
  45. recommended the committee do.
  46.  
  47. What does time_t represent and localtime() convert?  N38 (Harris)
  48. *    unsigned for future:  N39 (Franklin), N42 (Harris), N43 (Yao)
  49.     signed for past:  N41 (Olsen)
  50.     an implementation:  N44 (Campbell)
  51.  
  52. Far Past:  N46 (jsq)
  53. *    different representation:  N44 (jsq, genealogy), N47 (Horton)
  54.     use time_t:  N48 (Brader)
  55.  
  56. * indicates the side of the discussion that won, as I see it.
  57.  
  58. Abbreviations:
  59.     Brader:        Mark Brader
  60.     Campbell:    Larry Campbell
  61.     dag:        Douglas A. Gwyn
  62.     Devine:        Bob Devine
  63.     Elz:        Robert Elz
  64.     Franklin:    Dan Franklin
  65.     Harris:        Guy Harris
  66.     Horton:        Mark Horton
  67.     Isaak:        James Isaak (P1003 co-chair)
  68.     jbc:        John B. Chambers (guest moderator)
  69.     Jespersen:    Hal Jespersen (P1003.2 co-chair)
  70.     jsq:        John S. Quarterman (moderator)
  71.     Noel:        Greg Noel
  72.     Olsen:        Arthur Olsen
  73.     rbj:        Root Boy Jim Cottrell
  74.     Smith:        Roy Smith
  75.     Yao:        Joe Yao
  76.  
  77. Volume-Number: Volume 7, Number 7
  78.  
  79. From jsq  Sat Jul 19 12:37:44 1986
  80. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  81. Newsgroups: mod.std.unix
  82. Subject: Re: RFC.001 Timezone Interface
  83. Message-Id: <5369@ut-sally.UUCP>
  84. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  85. In-Reply-To: <5352@ut-sally.UUCP>
  86. Date: 19 Jul 86 17:36:06 GMT
  87. Draft-9: TZ.RFC.001
  88. Status: R
  89.  
  90. From: ll-xn!s3sun!sdcsvax!ncr-sd!greg.@topaz.UUCP
  91. Date: Fri, 18 Jul 86 15:47:39 PDT
  92. Organization: NCR Corporation, Rancho Bernardo
  93.  
  94. Some comments about the timezone proposal to be submitted to P1003.
  95. This is mostly nitpicking, but there are some loose ends that such
  96. a proposal will need to specify.  I will comment from Elz's text;
  97. the text of the proposal to P1003 follows this wording closely.
  98.  
  99. In article <5352@ut-sally.UUCP> Robert Elz writes:
  100. >localtime: converts the time_t "*t" to a "struct tm" representing
  101. >the given time adjusted to represent some local time difference.
  102. >"local time" will be specified by a call to "settz", if no such
  103. >call has preceded the call to localtime(), localtime() will call
  104. >"settz(getenv("TZ"));".  ........
  105.  
  106. Note that this implies that there must be some way for the implementation
  107. to tell (a) if settz has been previously called, and presumably, (b) what
  108. value was provided by settz.  This information should be part of the
  109. interface.  It is easy to imagine a utility logging subroutine that would
  110. want to use the local time when inserting log entries without disturbing
  111. other time-display calculations (the user might be running in a different
  112. time zone), so this logging subroutine will need to be able to set and
  113. potentially reset the time zone information.
  114.  
  115. [ Perhaps.  The assumption is that a process will either use the
  116. same variety of localtime throughout, or that it will explicitly
  117. set the kind it wants with settz before using localtime.
  118. That still leaves the question of how localtime knows settz
  119. has been used previously, but as long as it does, it's
  120. not clear that an application writer needs to know how
  121. it's done.  -mod ]
  122.  
  123. >If settz is called with an unrecognisable argument, the effect
  124. >is implementation defined.  (Users might expect any of three
  125. >"reasonable"? actions could be taken here -- use GMT, use local time,
  126. >or use local time in the area where the implementation was performed).
  127.  
  128. Since I have been bitten too many times by having the default time zone
  129. be that of the implementers, I feel that option three is unreasonable.
  130. Presumably, since an attempt was made to set the time zone to a non-local
  131. value, using GMT as a canonical non-local time zone is probably reasonable
  132. (for everybody except those in England, of course -- perhaps it should be
  133. called UCT when in this mode so as not to use the same abbreviation).
  134.  
  135. [ This is an example of something you'll find throughout 1003.1:
  136. an attempt to not outlaw existing behavior of existing systems.
  137. If option three were not included (ugly as it is), I doubt the committee
  138. would be able to reach consensus on including settz.  -mod ]
  139.  
  140. >What's missing:  So far here there is no mention of the "timezone name".
  141. >None of the standard mechanisms is really adequate here.  ......
  142. >Arthur Olson's scheme causes "localtime" to set a global variable
  143. >"tz_abbr" to the correct string name for the timezone just used.
  144.  
  145. I propose an extension of the System V mechanism.  That interface defines
  146. "extern char *tzname[2]" for the time zone names and has a field in the
  147. tm struct (tm_isdst) that is non-zero if daylight savings is in effect;
  148. i.e., the current timezone name is tzname[tm.tm_isdst != 0].  I propose
  149. that the standard add "extern char *tzname[]" (note that the length is
  150. not specified; the bound would be implementation-defined) and have wording
  151. that says that tzname[tm.tm_isdst] is the name of the relevant timezone.
  152. Since the current System V implementation only sets tm_isdst to zero or
  153. one, this is actually backward compatible.  (In fact, I just looked through
  154. our System V sources for uses of tzname; most of the uses are of the latter
  155. form rather than the former, so this proposal is even more compatible than
  156. it looks.)
  157.  
  158. >....[problems simulating BSDs "timezone()" function] - one might be to
  159. >retain "timezone" but not require that it be capable of returning
  160. >anything except the zone name corresponding to the last call of
  161. >localtime()  .......
  162.  
  163. With the above proposal, "timezone()" would return values selected from
  164. the tzname array if the time zone was one covered by the last settz(), or
  165. otherwise return a string of the form "+-hhmm".  This function probably
  166. should not be part of the standard, since it is primarily present for
  167. backward compatibility.  If it is present, it should be depreciated so
  168. that it can go away in the future.
  169.  
  170. And while we're on backward compatibility, the SysV function tzset() could
  171. be defined as "if(timezone_not_set) settz(getenv("TZ");" to be compatible
  172. with the way it currently works; again, if this function is defined, its
  173. usage should be depreciated.
  174.  
  175. [ I don't think tzset is in the standard, but that's a useful implementation
  176. note.  -mod ]
  177.  
  178. System V also defines external variables for the current timezone and daylight
  179. savings rule.  Are there any programs that actually use these?  Should they be
  180. part of the interface as well?  (Or some equivalent functionality?)
  181.  
  182. -- 
  183. -- Greg Noel, NCR Rancho Bernardo    Greg@ncr-sd.UUCP or Greg@nosc.ARPA
  184.  
  185.  
  186. Volume-Number: Volume 6, Number 34
  187.  
  188. From jsq  Mon Jul 21 08:46:20 1986
  189. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  190. Newsgroups: mod.std.unix
  191. Subject: Re: RFC.001 Timezone Interface
  192. Message-Id: <5382@ut-sally.UUCP>
  193. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  194. In-Reply-To: <5369@ut-sally.UUCP>
  195. Date: 21 Jul 86 13:46:02 GMT
  196. Draft-9: TZ.RFC.001
  197. Status: R
  198.  
  199. Date: Mon, 21 Jul 86 01:23:29 edt
  200. From: im4u!caip!mark@cbosgd.ATT.COM (Mark Horton)
  201. Organization: AT&T Bell Laboratories, Columbus
  202.  
  203. >System V also defines external variables for the current timezone and daylight
  204. >savings rule.  Are there any programs that actually use these?  Should they be
  205. >part of the interface as well?  (Or some equivalent functionality?)
  206.  
  207. Yes, there's an important use.  If you're generating an RFC 822 compatible
  208. >Date: line, you need to know the local offset from GMT or the time zone
  209. name.  You can't just plug in the time zone name, because only the names
  210. in the USA are allowed by 822, and if you try to extend that to the rest
  211. of the world, you run into ambiguities.  In general, you can't assume that
  212. someone in an arbitrary location in the world will understand your local
  213. name for your time zone.  So you have to generate a zone like "+hhmm".
  214.  
  215. One might even claim that, in a zone like Japan, asking for the time zone
  216. name should return "+0900" rather than "JST".  Probably not, but it's
  217. a thought.
  218.  
  219.     Mark
  220.  
  221. Volume-Number: Volume 6, Number 35
  222.  
  223. From jsq  Tue Jul 22 20:01:34 1986
  224. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  225. Newsgroups: mod.std.unix
  226. Subject: Re: RFC.001 Timezone Interface
  227. Message-Id: <5387@ut-sally.UUCP>
  228. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  229. Date: 23 Jul 86 01:00:55 GMT
  230. Draft-9: TZ.RFC.001
  231. Status: R
  232.  
  233. Date: 23 Jul 86 08:38:34 +1000 (Wed)
  234. From: Robert Elz <munnari!kre@SEISMO.CSS.GOV>
  235.  
  236. I have (more than) a few comments about some comments
  237. about the timezone proposal.
  238.  
  239. [ There's only one comment from the moderator in this article:
  240. discussions are very useful, but to get in the standard it needs
  241. exact wording.  In other words, anyone wanting changes to the
  242. proposal form I posted should supply *exact wording changes*.
  243. (An alternative would be to submit a complete new proposal.)
  244. -mod ]
  245.  
  246. Quotes until stated otherwise are from Greg Noel (ncr-sd!greg)...
  247.  
  248. > Note that this implies that there must be some way for the implementation
  249. > to tell (a) if settz has been previously called, and presumably, (b) what
  250. > value was provided by settz.
  251.  
  252. I agree, I hadn't considered this.  However, its essential that when
  253. there's an interface that sets some static state, there be some means
  254. to determine the current value of that state - I've been frustrated
  255. so many times by hardware with write only registers that I should
  256. have seen this myself.
  257.  
  258. But, now after thinking about it for a few days, I'm not sure how it
  259. should be done.  There would seem to be two quite different, but
  260. equally possible approaches, though neither is ideal.  One would be
  261. for settz() to save the arg string it is called with, and for a
  262. new function (gettz() ?) to return it.  That sounds simple enough,
  263. but unfortunately might be something of an implementation headache.
  264. The string can be of arbitrary length, so no static buffer in settz
  265. to hold it would be appropriate.  That means that settz would be
  266. required to malloc() memory to hold this string, just on the off
  267. chance that it might be needed later (which it very rarely will be).
  268. I really have very limited enthusiasm for making library routines
  269. at this level get involved in storage allocation.  (Settz could
  270. presumably just remember the pointer to the string it was passed,
  271. and gettz could return that pointer - but this has so many potential
  272. problems that its not worth contemplating).
  273.  
  274. The (an?) other implementation would be to define two functions,
  275. perhaps savetz() and restoretz().  Savetz would return (in some
  276. manner not important here) the internal state that settz has
  277. established.  restoretz() would restablish that state as settz
  278. would have left it.  This might be handled by having savetz
  279. copy the state into a buffer supplied by the caller, or perhaps
  280. it would malloc some memory and return a pointer to that.  Malloc
  281. here is not a problem, as its only being done by the specific
  282. request of the user, its not a hidden side effect.
  283.  
  284. Of the two schemes, I think I prefer the latter, but I would
  285. appreciate comments from readers, either to the list if you
  286. (and the moderator) think there will be general interest in your
  287. comments, or in mail to me.
  288.  
  289.  
  290. I think John Quarterman (our friendly moderator) answered your
  291. query about the "implementors timezone" default possibility
  292. for settz.  I might just add that I can't imagine how a new
  293. implementation could conceivably make that choice - its just
  294. there to cope with old code.  To implement this proposal,
  295. an implementation must be able to obtain both the hosts
  296. local time, and GMT without being told anything externally
  297. (ie: by being handed either (char *)0 or "" resp).  If it
  298. can do that, it can also easily choose one of those as the
  299. default in cases where it is given an invalid argument.
  300.  
  301.  
  302. > I propose an extension of the System V mechanism....  I propose
  303. > that the standard add "extern char *tzname[]" ... and have wording
  304. > that says that tzname[tm.tm_isdst] is the name of the relevant timezone.
  305.  
  306. Yes, this would be nice, unfortunately it can't work.  You are assuming
  307. that there is just one non-DST timezone name, and all the others are
  308. names of various DST types.  This just isn't true in general.
  309. Since tm_isdst must be zero for any tm_* that is not a daylight
  310. savings time representation, your scheme would allow only one
  311. non-DST zone name.  A new field could be added to struct tm to
  312. be the tzname[] index, but this would break all existing code
  313. that wants zone names, and if we're going to do that, perhaps we
  314. should look and see exactly when a zone name is required.
  315.  
  316. To the best of my knowledge, the only sensible use of a timezone
  317. name is to associate with a human visible date/time representation.
  318. Since these things aren't unique, they are useless to hold any
  319. internal representation of a timezone.  In effect, that means
  320. that the only time a timezone name will (should) ever be needed
  321. is when a date/time has been converted for external output, and
  322. the zone that will be wanted will be the zone of the time that
  323. was just converted.
  324.  
  325. If anyone has a counter-example, I would be pleased to learn of it.
  326.  
  327. Given this assumption, it seems that all that's needed is for
  328. localtime() to arrange that the relevant zone name is available
  329. somehow, either in an external "char *" variable, or as the
  330. return value of a function.
  331.  
  332. For Sys V compatability, and implementation could provide
  333. char *tzname[2] and set both pointers to the zone name
  334. needed?  Is anyone aware of any code this would break?
  335.  
  336. For v7 conpatability, the timezone(3) function could be made
  337. to ignore its args, and just return the selected zone name.
  338.  
  339.  
  340. > And while we're on backward compatibility, the SysV function tzset() could
  341. > be defined as "if(timezone_not_set) settz(getenv("TZ");" to be compatible
  342. > with the way it currently works; again, if this function is defined, its
  343. > usage should be depreciated.
  344.  
  345. Certainly, AT&T, and anyone who wants to be compatible with current
  346. Sys V programs should provide tzset as indicated, and should make it,
  347. as far as possible (note "tzname" difficulties as mentioned above)
  348. compatible with the functionality of the Sys V tzset.
  349.  
  350. However, including definitions in the standard, along with wording
  351. like "don't use this, it shouldn't be here, and is going away"
  352. seems ludicrous to me.
  353.  
  354.  
  355. > System V also defines external variables for the current timezone and daylight
  356. > savings rule.
  357.  
  358. I don't know about daylight savings rule, I don't remember that one,
  359. and my Sys V manual seems to have walked away, but "timezone" is
  360. impossible to get right.  There's no doubt that its intended usage
  361. is that tzset() should set this variable to the local standard timezone
  362. offset.  But this assumes that there is such a thing as a "standard
  363. timezone offset" that applies for all times in the zone.  This just
  364. isn't true..  Eg: a couple of years ago now, Singapore (I think)
  365. changed its timezone so it would be the same as Malaysia.  What
  366. value should be put in "timezone" for Singapore?  The correct answer
  367. depends on what time is being converted - if its a time before the
  368. switch, then it should be their old zone, for one after, it should be
  369. the new zone.  That is, its not a constant!
  370.  
  371.  
  372. Following quotes are from Mark Horton (cbosgd!mark)...
  373.  
  374. [about uses of "timezone"]
  375. > Yes, there's an important use.  If you're generating an RFC 822 compatible
  376. > Date: line, you need to know the local offset from GMT...
  377.  
  378. Nonsense!  This isn't a use of the Sys V "timezone" variable at all.
  379. That's not the information it provides.  What you need for an RFC822
  380. Date: line is the numeric offset of the time that was converted.
  381. That's not necessarily the hosts local time zone (which is what
  382. "timezone" is supposed to contain).  And even in cases where host local
  383. time is what is wanted, "timezone" isn't it - as the local time converted
  384. might have been a daylight savings time.  To turn the Sys V "timezone"
  385. into the correct thing in that case, one would need to imbed some
  386. nonsense like "if (tm->tm_isdst) timezone += 60;"  (or maybe -= 60,
  387. and maybe the number is 3600, details are irrelevant.  And no, I
  388. wouldn't really modify "timezone").  Getting rid of assumptions about
  389. things like DST being one hour forwards is one of the major aims of
  390. all this.
  391.  
  392. What *is* needed is a method to obtain the timezone offset that is
  393. appropriate for a given time.  That's a different problem entirely.
  394. An interface to provide this information might be valuable.  If
  395. there isn't such an interface, then the offset can easily calculated
  396. in a portable manner by applications (see my posting to mod.sources,
  397. vol 6 issue 12 "datediffs" for an example of doing approximately this).
  398.  
  399.  
  400. > One might even claim that, in a zone like Japan, asking for the time zone
  401. > name should return "+0900" rather than "JST".  Probably not, but it's
  402. > a thought.
  403.  
  404. This was, of course, a joke (and not even a good one).
  405.  
  406.  
  407. Robert Elz    seismo!munnari!kre   kre%munnari.oz@seismo.css.gov
  408.  
  409. Volume-Number: Volume 6, Number 36
  410.  
  411. From jsq  Fri Jul 25 10:20:27 1986
  412. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  413. Newsgroups: mod.std.unix
  414. Subject: timezone implementation constraints
  415. Message-Id: <5406@ut-sally.UUCP>
  416. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  417. Keywords: 1003.1 A.3
  418. Date: 25 Jul 86 15:20:14 GMT
  419. Draft-9: TZ
  420. Status: R
  421.  
  422. From: hplabs!hao!vianet!devine@pyramid.UUCP (Bob Devine)
  423. Date: Thu, 24 Jul 86 23:13:44 mdt
  424.  
  425. [ This is really not directly related to IEEE 1003.1, since
  426. it solely discusses the details of an *implementation* and
  427. says nothing about the *interface*.  However, it does
  428. address something which has been previously discussed
  429. in this newsgroup, and I can't think of a better place for it.
  430. However, please do detailed line-by-line discussions of this
  431. through mail among interested parties.
  432.  
  433. Could we find a new topic?
  434. -mod]
  435.  
  436.   Arthur Olson's recent posting to mod.sources included the updated
  437. settz data tables.  This reply in mod.std.unix is to correct some
  438. of the entries in the table and re-raise my points about what is the
  439. best implementation.  I believe everyone has agreed on Robert Elz's
  440. direction for the POSIX document wording.
  441.  
  442.   The lines beginning with "> " are from Arthur Olson.
  443.  
  444. > Bob Devine has written that ". . .your table is wrong for MostNA in 1974.
  445. > The correct ending date is 10/27 not 11/24."  Yet on a 4.1bsd VAX/11-750
  446. > system, compiling and executing the program
  447. > [[[ program omitted ]]]
  448. > results in the output
  449. >    Fri Nov  1 22:40:00 1974
  450. >    isdst: 1
  451. > For now we'll stay with 4.1bsd's version.
  452.  
  453.   The date I gave is correct.  Any version of Unix that uses 11/24 is
  454. simply wrong.  The dates for 1974 and 1975 DST rules are:
  455.       1974   1/6  to 10/27
  456.       1975   2/28 to 10/26
  457.   Even the source for Xenix V that I just checked has it wrong.  Believe
  458. me folks, this comes directly from Dept of Transportation.  (If you are
  459. wondering why DOT has responsibility for such info, drop me a line. BD)
  460.  
  461. > Note also this from munnari!kre:
  462. > "I recall also being told by someone once that Canada didn't have
  463. > the DST variations in 74/75 that the US did, but I am not nearly
  464. > sure enough of this to add anything."
  465. > If Canada or Mexico decide not to follow the US change in DST that takes
  466. > effect in 1987, additions had best be made below.
  467.  
  468. Canada did not follow the fuel follies for '4 and '5.
  469. Please split the rules *by country*, not by continent, to avoid such problems.
  470. The "MostNA" rules listed are incorrect for Canada and Mexico!
  471.  
  472. > Before the Uniform Time Act of 1966 took effect in 1967, observance of
  473. > Daylight Saving Time in the US was by local option, except during wartime.
  474.  
  475.   This is the acid-test of all proposals for handling DST rules.  When I
  476. submitted my suggestion to mod.std-unix last February (that now seems like
  477. the distant past), I used the most common way of representing the changes.
  478. The reason was I had examined all the world-wide rules and after silently
  479. tearing my hair out trying to come up with a small table, decided to
  480. go with the only way that I had any hope of getting right.  To represent
  481. all of the worldwide rules for just +/- 5 years requires several hundred
  482. lines.  No speed would ever be possible for a full table.  My way was to
  483. just represent the current year.  At best, that simple formula would work
  484. for many years; at worst, changes can't be handled (which is why folks
  485. did fall in love with it).
  486.  
  487.   The US tried to standardize DST rules in that '66 Act.  But, of course,
  488. there are still many exceptions.  Plus, checking dates prior to it is
  489. painful.  Now imagine how the US was before 1967 and apply that to the
  490. world.  You get the feeling of near chaos?
  491.  
  492.   I have since come to the conclusion that the best way to represent
  493. DST and timezone information is a single rule plus an "exceptions database".
  494. Only if the simple rule doesn't work (e.g., past or future years, other
  495. timezones) is the database used.  This way, rules can be added as needed.
  496. Or the entire database can be empty with the single rule used for all
  497. conversions.
  498.  
  499.   DST is almost like the (jeez, I forgot who said it) quote about the
  500. universe "being more complicated that can be possibly imagined".
  501. This is not an exact analogy, but, at least physical laws are controlled
  502. by Congress!
  503.  
  504.  
  505. ># Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  506. >Rule    MostNA    1967    1973    -    Apr    lastSun    2:00    1:00    D
  507. >Rule    MostNA    1967    1973    -    Oct    lastSun    2:00    0    S
  508.  
  509. Note: the rules for 1967 - 1973 depend on what state/territory you are in.
  510. For example, Michigan is an exception to the rule for 1969-72 but not for
  511. 1967-68.  Eastern Indiana is another tricky one for this period.  Again,
  512. note that this is *after* the '66 Act that tried to standardize DST.
  513.  
  514. >Rule    MostNA    1974    only    -    Jan    6    2:00    1:00    D
  515. >Rule    MostNA    1974    only    -    Nov    24    2:00    0    S
  516.  
  517. Should be ====>                         Oct     27
  518.  
  519. ># New names
  520. >Zone    Newfoundland    -3:30    -    NST    # Is DST now observed here?
  521.                         ># If so, when did it start?
  522.  
  523. Newfoundland observes DST by the same rules as the rest of Canada -- the
  524. last Sunday in April to the last Sunday in October.  It has followed this
  525. pattern since 1951.  Changeover time is 2am.
  526.  
  527. Saskatchewan is another matter...part in EST; part in CST which doesn't use DST.
  528.  
  529. ># Nonstandard mainland areas:
  530.  
  531. These rules are impossible to formulate.  The amazing variety of
  532. different DST rules makes such a tabularizing absurd.  The rules vary
  533. by state, by regions within states, by areas that have not yet even
  534. been admitted to the union, by county, by city, and seemingly by whim.
  535.  
  536. >Rule    SomeUS    1918    1919    -    Mar    lastSun    2:00    1:00    D
  537. >Rule    SomeUS    1918    1919    -    Oct    lastSun    2:00    0    S
  538. >Rule    SomeUS    1942    only    -    Feb    9    2:00    1:00    W # War
  539. >Rule    SomeUS    1945    only    -    Sep    30    2:00    0    S
  540. >
  541. >Zone    East-Indiana    -5:00    SomeUS    E%sT # Usually standard near South Bend
  542. >Zone    Arizona        -7:00    SomeUS    M%sT # Usually standard in Arizona
  543. >
  544. ># And then there's Hawaii.
  545. >Rule    Hawaii    1947    only    -    Jun    8    2:00    0    S
  546.  
  547. The information I have does not show any DST changes in 1947.  DST was
  548. not observed in the period 1946-present.
  549.  
  550. Bob Devine
  551.  
  552. Volume-Number: Volume 6, Number 37
  553.  
  554. From jsq  Sat Jul 26 23:35:50 1986
  555. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  556. Newsgroups: mod.std.unix
  557. Subject: Re: timezone implementation constraints
  558. Message-Id: <5422@ut-sally.UUCP>
  559. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  560. Date: 27 Jul 86 04:35:36 GMT
  561. Draft-9: TZ
  562. Status: R
  563.  
  564. From: sun!gorodish!guy@utastro.UUCP (Guy Harris)
  565. Date: Sat, 26 Jul 86 17:19:08 PDT
  566.  
  567. > This is really not directly related to IEEE 1003.1, since
  568. > it solely discusses the details of an *implementation* and
  569. > says nothing about the *interface*.
  570.  
  571. There is one point, though, that is a concern of the interface; what times
  572. can "localtime" convert and, more generally, what times can a "time_t"
  573. represent?  The P1003.1 standard refers to the definition of "localtime" in
  574. the X3J11 C standard.  That standard doesn't say anything about the meaning
  575. of the value returned by "time".  The P1003.1 standard defines it as UNIX
  576. time, namely the number of seconds since January 1, 1970, 00:00 GMT.
  577.  
  578. Existing UNIX implementations at least make an attempt to convert times not
  579. in the current year; programs such as "ls" depend on this.  If the current
  580. standard can be interpreted as permitting "localtime", etc. not to make
  581. their best effort to convert times not in the current year, the proposal
  582. must tighten the wording so that this is required.  It may be possible to
  583. permit "best effort" to mean "use this year's rules", although I suspect
  584. people would not be at all happy with such an implementation.  An
  585. implementation must specify what sort of effort it will make to convert
  586. times, so that if somebody doesn't want to get stuck with an implementation
  587. that can't convert times outside the current year they can avoid them.
  588.  
  589. Obviously, times in the future can't be converted with absolute certainty.
  590. There's not much point in worrying about the inability to predict future
  591. changes to daylight savings time rules.
  592.  
  593. I suspect all the debates about conversion of times in 1947 may be
  594. completely irrelevant, since the UNIX epoch starts in 1970.  The use of the
  595. word "since" indicates to me that only positive values of a "time_t" are
  596. valid.  Either the standard should require this, or should indicate that
  597. "time_t" may be negative.  I see no reason to permit negative values for
  598. times; the difference *between* times can, however, be negative.  As such,
  599. if "time_t" is to be used in programs for P1003.1 systems to represent the
  600. difference between two times, it should not be an unsigned type.  If one
  601. restricts times (as opposed to time differences) to be positive, the largest
  602. possible differences (both positive and negative) between two times will fit
  603. in a "time_t".
  604.  
  605. I propose that:
  606.  
  607.     1) the specification of "time" should be tightened to indicate
  608.        that it will not return a negative value.
  609.  
  610.     2) the specification of "stat" should also indicate that the
  611.        modification, access, and inode-change times shall never
  612.        be negative.
  613.  
  614.     3) the "utime" call be required to return EINVAL if an attempt
  615.        is made to set the access or modification times of a file
  616.        to negative values.
  617.  
  618. If "time" is to return a valid time value, it will never return a negative
  619. value since 1970 has already passed.  Since UNIX came out in 1971, if "stat"
  620. or "fstat" were to return a valid time value for access, modification, or
  621. inode-change time, it will never be negative since there weren't UNIX
  622. systems (or any other flavor of P1003.1-compliant system) before 1970.
  623. Thus, the only way times can be negative are if the system clock is set to a
  624. negative value - since P1003.1 specifies no system call to set the system
  625. clock, this is out of its control, although a caveat about this should
  626. perhaps be included - or if "utime" is used to set the clock to such a
  627. value, which P1003.1 can forbid.
  628.  
  629. Volume-Number: Volume 6, Number 38
  630.  
  631. From jsq  Mon Aug 11 09:46:36 1986
  632. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  633. Newsgroups: mod.std.unix
  634. Subject: time_t range
  635. Message-Id: <5534@ut-sally.UUCP>
  636. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  637. Date: 11 Aug 86 14:46:25 GMT
  638. Draft-9: time_t TZ
  639. Status: R
  640.  
  641. From: dan@BBN-PROPHET.ARPA 
  642. Date:     Thu, 7 Aug 86 10:24:40 EDT
  643.  
  644. I agree that time_t need not be able to represent times before 1970.
  645. However, I think it's rather short-sighted to say that time_t should never
  646. have its high-order bit set.  That restricts it to representing times
  647. before January 2038.  "UNIX will be dead by then!" you say; well, people
  648. have been predicting the death of Fortran and COBOL for a long time now,
  649. and it still hasn't happened, nor does it show any sign of happening.  In
  650. UNIX's case the fact that it's the first portable operating system is
  651. likely to cause it to continue to exist in some form for MANY years.  Even
  652. if UNIX itself doesn't last until 2038, it will certainly last long enough
  653. that application programmers will find it useful to be able to store and
  654. manipulate future time values later than 2038.  They would undoubtedly
  655. appreciate it greatly if the system library routines supplied with UNIX
  656. worked for those time values.
  657.  
  658. Personally I believe that time_t ought to be an unsigned long, rather than
  659. signed, but that would probably break a lot of existing code.  Still, we
  660. should avoid later problems by specifying that library routines that work
  661. with time_t values should treat it as unsigned, and should work for the
  662. entire range of possible values.  This at least makes it possible for
  663. careful programmers to get their code right.
  664.  
  665. Most of the time-related facilities in UNIX have long been marked by
  666. an amazing short-sightedness.  Let's not perpetuate it.
  667.  
  668.     Dan
  669.  
  670. Volume-Number: Volume 6, Number 39
  671.  
  672. From jsq  Fri Aug 29 13:51:32 1986
  673. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  674. Newsgroups: mod.std.unix
  675. Subject: negative time_t values
  676. Message-Id: <5638@ut-sally.UUCP>
  677. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  678. Keywords: RFC.001, timezones
  679. Date: 29 Aug 86 18:51:09 GMT
  680. Draft-9: TZ.time_t
  681. Status: R
  682.  
  683. From: elsie!ado@seismo.UUCP 
  684. Date: Mon, 25 Aug 86 18:35:05 EDT
  685. Subject: negative time_t values
  686.  
  687. While it's true that no UNIX files date back to before January 1, 1970,
  688. there *are* uses for times before that epoch:  in personnel data bases where
  689. birth dates are recorded; in data bases recording astronomical events;
  690. in stock market price data bases (as used by chartist fanatics); and elsewhere.
  691. (And what of all those old 7094 executables that are being used on IBM machines
  692. running UNIX or a cousin?  :-))
  693.  
  694. I see more use in the short run for being able to record times between
  695. 1901 and 1970 that I see for being able to record times after 2038.
  696. And if we do make it into the twenty-first century, I imagine we'll be working
  697. on machines with 256-bit registers where time_t will have a type that allows
  698. it to represent times into the very distant future; if it's defined properly,
  699. time_t variables will also be able to represent times into the very distant
  700. past.
  701.  
  702. In summary:  I'd recommend retaining the ability for time_t variables to
  703. represent times before 1970.
  704. --
  705. UNIX is an AT&T registered trademark.
  706. Time is a Time/Life Incorporated trademark.
  707. IBM is an IBM trademark.
  708. --
  709.     UUCP: ..decvax!seismo!elsie!ado   ARPA: elsie!ado@seismo.ARPA
  710.     DEC, VAX, Elsie & Ado are Digital, Borden & Ampex trademarks.
  711.  
  712.  
  713. Volume-Number: Volume 6, Number 41
  714.  
  715. From jsq  Wed Sep  3 22:42:17 1986
  716. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  717. Newsgroups: mod.std.unix
  718. Subject: Re: negative time_t values
  719. Message-Id: <5661@ut-sally.UUCP>
  720. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  721. Date: 4 Sep 86 03:42:05 GMT
  722. Draft-9: TZ.time_t
  723. Status: R
  724.  
  725. From: sun!gorodish!guy@utastro.UUCP (Guy Harris)
  726. Date: Sat, 30 Aug 86 20:39:06 PDT
  727.  
  728. > While it's true that no UNIX files date back to before January 1, 1970,
  729. > there *are* uses for times before that epoch:
  730.  
  731. Yes, but there are other representations for such dates and times; there's
  732. no particular need to have "time_t" objects represent dates in 4004 BCE, for
  733. example.  Most of the time, they are represented as mixed-radix numbers,
  734. giving year, month, day, etc., or year, day of year, etc..  The standard
  735. arithmetic functions on dates (date1 - date2, date1 + offset, etc.) are
  736. possible, if slightly less convenient, as are comparisons of dates.  Most of
  737. the examples given don't currently use "time_t", as they're not done on UNIX
  738. systems, and there's no good reason to change them and not much reason to
  739. use "time_t" for future programs of those sorts.  ("time_t" is an especially
  740. poor choice for astronomical event databases; many interesting such events
  741. occurred more than 68 years before 1970....)
  742.  
  743. > I see more use in the short run for being able to record times between
  744. > 1901 and 1970 that I see for being able to record times after 2038.
  745.  
  746. Yes, but is there a use for recording UNIX file modification times between
  747. 1901 and 1970?  Other times can be recorded in forms other than a "time_t".
  748.  
  749. > In summary:  I'd recommend retaining the ability for time_t variables to
  750. > represent times before 1970.
  751.  
  752. It's not a case of "retaining".  The 1003.1 Trial-Use Standard says that the
  753. result of "time" represents "the value of times in seconds *since* 00:00:00
  754. GMT, January 1, 1970" (italics mine), and that the values of the time fields
  755. in a "stat" structure are also times since the epoch.  All definitions of
  756. "since" in the Webster's Third in my office indicate that it refers to times
  757. in the future of the associated event, so March 25, 1967, 18:00:00 GMT is
  758. not a time since the epoch and is not a value that "time" will return, nor
  759. is it a time that will appear in a "struct stat" time field.
  760.  
  761. Assigning a meaning to negative "time_t" values may be straightforward in
  762. that it's done by replacing "since" with "before, at, or since"; however, it
  763. does involve changes to existing UNIX implementations to permit them to be
  764. interpreted as local times (even with table-driven time zone conversion
  765. routines, one has to get the tables right!).  Few, if any, existing programs
  766. deliberately store negative values in "time_t" variables; many of those
  767. programs are likely to want to store times more than +/- 68 years from the
  768. epoch, so liberalizing the meaning of "time_t" isn't going to help them.
  769. They'll have to wait for the hypothetical time in the future when "time_t"
  770. is made a "long long int" or when all 32-bit machines have been replaced by
  771. 64-bit machines to make "time_t" useful to them.
  772.  
  773. Volume-Number: Volume 6, Number 42
  774.  
  775. From jsq  Wed Sep  3 23:00:15 1986
  776. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  777. Newsgroups: mod.std.unix
  778. Subject: Re: negative time_t values
  779. Message-Id: <5663@ut-sally.UUCP>
  780. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  781. Keywords: RFC.001
  782. Summary: disagree with ado
  783. In-Reply-To: <5638@ut-sally.UUCP>
  784. Date: 4 Sep 86 03:59:55 GMT
  785. Draft-9: TZ.time_t
  786. Status: R
  787.  
  788. From: hadron!jsdy@seismo.UUCP (Joseph S. D. Yao)
  789. Date: Tue, 2 Sep 86 04:14:29 edt
  790. Organization: Hadron, Inc., Fairfax, VA
  791.  
  792. In article <5638@ut-sally.UUCP> you write:
  793. >From: elsie!ado@seismo.UUCP 
  794. >While it's true that no UNIX files date back to before January 1, 1970,
  795. >there *are* uses for times before that epoch:  in personnel data bases where
  796. >birth dates are recorded; in data bases recording astronomical events;
  797. >in stock market price data bases (as used by chartist fanatics); and elsewhere.
  798.  
  799. These should be recorded in the DATE format of your DBMS, not as a
  800. longint!  If your DBMS has no DATE format (tsk!), it should be recorded
  801. as three [or six] ints.  Yes, I know you'll have to compare via a
  802. procedure instead of an op; see the (tsk!) above.
  803.  
  804. >(And what of all those old 7094 executables that are being used on IBM machines
  805. >running UNIX or a cousin?  :-))
  806.  
  807. What of them?
  808.  
  809. >I see more use in the short run for being able to record times between
  810. >1901 and 1970 that I see for being able to record times after 2038.
  811.  
  812. Possibly.  But I plan to be living (and making plans) well into the
  813. 2000's.  I don't want to run up against a wall.  (I already have, in
  814. that versions of Unix today don't allow such dates, and I have -- I
  815. don't remember why! -- tried to use them.)
  816.  
  817. In addition, you would not be "retaining" any capability -- the systems
  818. I know tend to turn negative dates into something on the order of:
  819.     Sat Feb  5 01:28:16 2^A06
  820. (This is -(60*60*24): the '^A' is, yes, a control-A.)
  821. Any date after 31 Dec 1999 up to some value >> 2^31 loses everything
  822. after the '2' in the year:  I think the second char of the year is
  823. being converted to a control-@, or NUL character.
  824.  
  825. (Results from 4BSD and Ultrix on VAX and 680x0 processors.  I haven't
  826. tried this on the s5/VAX.)
  827. -- 
  828.  
  829.     Joe Yao        hadron!jsdy@seismo.{CSS.GOV,ARPA,UUCP}
  830.             jsdy@hadron.COM (not yet domainised)
  831.  
  832. Volume-Number: Volume 6, Number 43
  833.  
  834. From jsq  Fri Sep  5 17:46:54 1986
  835. From: std-unix%ut-sally.UUCP@SALLY.UTEXAS.EDU (Moderator, John Quarterman)
  836. Newsgroups: mod.std.unix
  837. Subject: Re: negative time_t values
  838. Message-Id: <5673@ut-sally.UUCP>
  839. References: <5663@ut-sally.UUCP>
  840. Reply-To: campbell%maynard.UUCP@harvisr.HARVARD.EDU (Larry Campbell)
  841. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  842. Keywords: RFC.001
  843. Summary: not all unix libraries are broken
  844. Date: 5 Sep 86 22:46:42 GMT
  845. Draft-9: TZ.time_t
  846. Status: R
  847.  
  848. From: campbell%maynard.UUCP@HARVISR.HARVARD.EDU (Larry Campbell)
  849. Date: Fri, 5 Sep 86 01:51:09 EDT
  850. Organization: The Boston Software Works, Inc.
  851.  
  852. >From: hadron!jsdy@seismo.UUCP (Joseph S. D. Yao)
  853. >
  854. >In addition, you would not be "retaining" any capability -- the systems
  855. >I know tend to turn negative dates into something on the order of:
  856. >    Sat Feb  5 01:28:16 2^A06
  857. > ...
  858. >(Results from 4BSD and Ultrix on VAX and 680x0 processors.  I haven't
  859. >tried this on the s5/VAX.)
  860.  
  861. For what it's worth, I tried several interesting values on my VENIX 2.0
  862. (V7-based) system.  It handles negative values "properly" (that is, it
  863. prints reasonable dates prior to 1970);  for instance, 0xC0000000 yields
  864. "1935 Dec 23 05:22:56".  And it also handles dates beyond 2000 correctly;
  865. 0x70000000 yields "2029 Jul 18 01:49:52".
  866. -- 
  867. Larry Campbell                             The Boston Software Works, Inc.
  868. ARPA: campbell%maynard.uucp@harvard.ARPA   120 Fulton Street, Boston MA 02109
  869. UUCP: {alliant,wjh12}!maynard!campbell     (617) 367-6846
  870.  
  871. [ Depends on what you call broken.
  872.  
  873. Another example where time values outside the currently supported
  874. (or proposed) range would be useful:  some of us like to play with
  875. genealogical software;  I have known ancestors back to the thirteenth
  876. century and frequently work with data to the sixteenth century.
  877. But time_t probably isn't the appropriate format to keep such dates,
  878. considering Julian vs. Gregorian calendars, old and new style new years,
  879. etc.  -mod ]
  880.  
  881. Volume-Number: Volume 6, Number 44
  882.  
  883. From news  Mon Sep 15 09:57:17 1986
  884. From: std-unix%ut-sally.UUCP@sally (Moderator, John Quarterman)
  885. Newsgroups: mod.std.unix
  886. Subject: Re: negative time_t values
  887. Message-Id: <5728@ut-sally.UUCP>
  888. References: <5673@ut-sally.UUCP> <5663@ut-sally.UUCP>
  889. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  890. Keywords: RFC.001, time zones
  891. Date: 15 Sep 86 14:57:00 GMT
  892. Draft-9: TZ.time_t
  893. Status: R
  894.  
  895. From: cbosgd!cbosgd.ATT.COM!mark@seismo.UUCP (Mark Horton)
  896. Date: Wed, 10 Sep 86 12:40:40 edt
  897. Organization: AT&T Bell Laboratories, Columbus
  898.  
  899. There are many uses for dates, on which you'd like to be able
  900. to do arithmetic.  I don't see where the assumption that time_t
  901. is only useful for file modification times got made.  We have
  902. an application that needs to be able to store birth dates of
  903. people living today, and of their parents.  We would like to be
  904. able to use the same format for parents' birth dates and for
  905. machine generated time stamps.  And we'd like to be able to
  906. easily add or subtract 3 hours, for example, from such a quantity.
  907.  
  908. Note that all the UNIX routines to deal with dates, such as ctime,
  909. localtime, gmtime, and asctime, deal with time_t quantities.  There
  910. are no operations provided to manipulate a struct tm.  This means
  911. there's a huge penalty for any application that needs to manipulate
  912. times that might be before 1970 or after 2038.  They must implement
  913. a set of primitives to manipulate a struct tm or other data structure
  914. (such as an ISO format time string, which is also broken into year,
  915. month, day, etc.)
  916.  
  917. Even if you offered us dates back to 1901, it wouldn't be enough for
  918. our application.  We have to go back to about 1850.  But I would hope
  919. to see some facilities added to manipulate a more general date/time
  920. format than a time_t.  Maybe the 4.2BSD struct timeval needs to have
  921. another field added to indicate a base year (defaulting to 1970.)
  922.  
  923.     Mark
  924.  
  925. [ There are manipulation (adding, subtracting) routines for timeval
  926. in the 4.2BSD kernel, by the way, though they never seem to have been
  927. brought out into a user-accessible library, even in 4.3BSD (except
  928. for timerisset, timercmp, and timerclear in <sys/time.h>).  -mod ]
  929.  
  930. Volume-Number: Volume 6, Number 47
  931.  
  932. From news  Mon Sep 15 11:17:56 1986
  933. From: std-unix%ut-sally.UUCP@sally (Moderator, John Quarterman)
  934. Newsgroups: mod.std.unix
  935. Subject: negative time_t values
  936. Message-Id: <5729@ut-sally.UUCP>
  937. References: <5663@ut-sally.UUCP> <5673@ut-sally.UUCP>
  938. Organization: IEEE 1003 Portable Operating System for Computer Environments Committee
  939. Keywords: RFC.001, time zones
  940. Date: 15 Sep 86 16:17:41 GMT
  941. Draft-9: TZ.time_t
  942. Status: R
  943.  
  944. From: mnetor!utzoo!dciem!msb@seismo.UUCP  (Mark Brader)
  945. Date: Thu, 11 Sep 86 18:37:22 edt
  946.  
  947. > Another example where time values outside the currently supported
  948. > (or proposed) range would be useful:  some of us like to play with
  949. > genealogical software;  I have known ancestors back to the thirteenth
  950. > century and frequently work with data to the sixteenth century.
  951. > But time_t probably isn't the appropriate format to keep such dates,
  952. > considering Julian vs. Gregorian calendars, old and new style new years,
  953.  
  954. I would say that time_t WOULD be the appropriate format, for PRECISELY
  955. those reason, if the range was available.  To say otherwise is to say
  956. that time_t is inappropriate for the way it's normally used because of
  957. time zones and daylight and standard time.
  958.  
  959. [ Not precisely, since the form a date is recorded in may vary according
  960. to not only present location but national origin of the recorder or of the
  961. person whose date it is, since there are relatively odd formats (1617/18
  962. is a common format, being used with a date between Jan 1 and Mar 15),
  963. since many dates are incomplete (e.g., only year is known), and since
  964. accuracy to the hour is very rare, not to even mention minutes or seconds.
  965.  
  966. Incidentally, the Mormon Church is coordinating the development of
  967. something called GEDCOM (GEnealogical Data COMmunications), which is
  968. a genealogical data interchange format.  (It looks rather like a network
  969. presentation layer to me, even resembling XDR a bit.)  They must have
  970. produced some standard for genealogical dates.  I believe I will write
  971. off for a copy for myself.  The address (if anyone else is interested)
  972. is probably
  973.  
  974.     Genealogical Department
  975.     Ancestral File Operations Unit
  976.     50 E. North Temple St.
  977.     Salt Lake City, UT 84150
  978.  
  979. However, I suspect that general discussions on genealogy belong in
  980. another newsgroup, so submissions to mod.std.unix related to genealogy
  981. should probably be kept related to date formats or other implementation
  982. issues.  -mod ]
  983.  
  984. While I'm writing I must correct the common assertion that time_t represents
  985. a time in the UT (GMT) system.  It doesn't.  It represents a time in seconds
  986. from a certain epoch.  The time in time_t form at the moment, for instance, is
  987. 526,841,748.  The corresponding time in UT is 4:55:48 pm.  Granted that
  988. the latter is derived from the former by slightly simpler arithmetic than
  989. is my local zone time, that doesn't mean that a time_t represents a time
  990. in UT in particular.
  991.  
  992. I don't think this is of sufficient interest to post to mod.std.unix,
  993. but you may post any or all if you wish.
  994.  
  995. Mark Brader, utzoo!dciem!msb
  996.     If ... it seems easier to subvert UNIX systems than most other systems,
  997.     the impression is a false one.  The subversion techniques are the same.
  998.     It is just that it is often easier to write, install, and use programs
  999.     on UNIX systems than on most other systems, and that is why the UNIX
  1000.     system was designed in the first place.
  1001.                 -- Frederick T. Grampp & Robert H. Morris
  1002.  
  1003. Volume-Number: Volume 6, Number 48
  1004.  
  1005.