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