Today I noticed my Plan 9 machine displayed time which is 1 hr past
surrounding world.  Digging around, I found that DST start/end dates
for Eastern-European Time (/adm/timezone/EET) for current year are
bad.  Those follow pre-1996 conventions for ending dates and does DST
switch 2 hours later.  For more information, see
http://en.wikipedia.org/wiki/European_Summer_Time.

Bundled program prints valid pair of dates for a given year in
1996-2099 range.

Yaroslav.


# To unbundle, run this file
echo eet.c
sed 's/.//' >eet.c <<'//GO.SYSIN DD eet.c'
-/* Calculates DST start/end dates for EET timezone on a year given on
-cmdline.  {8c eet.c && 8l eet.8 && 8.out} */
-#include <u.h>
-#include <libc.h>
-
-void
-main(int argc, char* argv[])
-{
-       int yr = 2009;
-       Tm tm[] = {{
-               .sec = 0,
-               .min = 0,
-               .hour = 1,
-               .mday = 0,
-               .mon = 2,
-               .year = 0,
-               .wday = 0,
-               .zone = "GMT",
-               .tzoff = 0
-       }, {
-               .sec = 0,
-               .min = 0,
-               .hour = 1,
-               .mday = 0,
-               .mon = 9,
-               .year = 0,
-               .wday = 0,
-               .zone = "GMT",
-               .tzoff = 0
-       }};
-       
-       if(argc > 1)
-               yr = atoi(argv[1]);
-       
-       tm[0].year = tm[1].year = (yr - 1900);
-       tm[0].mday = (31 - (5*yr/4 + 4) % 7);
-       tm[1].mday = (31 - (5*yr/4 + 1) % 7);
-       /* formulas are valid until 2099 */
-
-       print("%d %d\n", tm2sec(&tm[0]), tm2sec(&tm[1]));
-       exits(nil);
-}
//GO.SYSIN DD eet.c


Reply via email to