Simultaneous zone and DST changes

Paul Eggert eggert at twinsun.com
Wed May 15 07:55:11 UTC 1996


   Date: Tue, 14 May 96 14:31:50 EDT
   From: ado at elsie.nci.nih.gov (Arthur David Olson)

   I lean toward the second approach; are there any better ideas out there?

How about the following implementation of the 2nd approach instead?
It's the same basic idea, except that the two transitions are merged
if their before-transition localtimes are the same (or if the latter
precedes the former!).  This should avoid the horridness of the 1-hour
special case.

This patch fixes bugs in the following transitions:

     1919-03-01 Europe/Brussels
     1973-04-29 America/Menominee
     1983-10-30 America/Juneau
     1985-04-19 Asia/Istanbul
     1985-09-15 Atlantic/Stanley

===================================================================
RCS file: RCS/zic.c,v
retrieving revision 1996.6
retrieving revision 1996.6.1.2
diff -c -r1996.6 -r1996.6.1.2
*** zic.c	1996/05/03 02:49:23	1996.6
--- zic.c	1996/05/15 07:51:50	1996.6.1.2
***************
*** 1397,1406 ****
  		if (isdsts[0] == 0)
  			while (attypes[fromi].type == 0)
  				++fromi;	/* handled by default rule */
! 		for ( ; fromi < timecnt; ++fromi)
  			if (toi == 0 ||
  				attypes[toi - 1].type != attypes[fromi].type)
  					attypes[toi++] = attypes[fromi];
  		timecnt = toi;
  	}
  	/*
--- 1397,1416 ----
  		if (isdsts[0] == 0)
  			while (attypes[fromi].type == 0)
  				++fromi;	/* handled by default rule */
! 		for ( ; fromi < timecnt; ++fromi) {
! 			if (toi != 0
! 			    && ((attypes[fromi].at
! 				 + gmtoffs[attypes[toi - 1].type])
! 				<= (attypes[toi - 1].at
! 				    + gmtoffs[toi == 1 ? 0
! 					      : attypes[toi - 2].type]))) {
! 				attypes[toi - 1].type = attypes[fromi].type;
! 				continue;
! 			}
  			if (toi == 0 ||
  				attypes[toi - 1].type != attypes[fromi].type)
  					attypes[toi++] = attypes[fromi];
+ 		}
  		timecnt = toi;
  	}
  	/*



More information about the tz mailing list