From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <1209a838da1003845b874b8a9ca0b4b7@isd.dp.ua> To: 9fans@9fans.net From: yaroslav Date: Mon, 28 Sep 2009 15:33:22 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: [9fans] /adm/timezone/EET is bad Topicbox-Message-UUID: 792e8c16-ead5-11e9-9d60-3106f5b1d025 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 -#include - -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