mktime problems when adjusting tm_isdst

Arthur David Olson ado
Tue Oct 10 14:34:55 UTC 1995


We could run through the transition times from future to past (rather than from
past to future as is done now); this doesn't solve the deep problem, but does
get the "TZ=Europe/Paris 1996-01-01 00:00:00 tm_isdt=1" case right.  It does
have the advantage of being a fairly minimal change to the code.

					--ado

***************
*** 1458,1467 ****
  	if (sp == NULL)
  		return WRONG;
  #endif /* defined ALL_STATE */
! 	for (samei = 0; samei < sp->typecnt; ++samei) {
  		if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
  			continue;
! 		for (otheri = 0; otheri < sp->typecnt; ++otheri) {
  			if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
  				continue;
  			tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
--- 1458,1467 ----
  	if (sp == NULL)
  		return WRONG;
  #endif /* defined ALL_STATE */
! 	for (samei = sp->typecnt - 1; samei >= 0; --samei) {
  		if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
  			continue;
! 		for (otheri = sp->typecnt - 1; otheri >= 0; --otheri) {
  			if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
  				continue;
  			tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -




More information about the tz mailing list