Timezone problem?

pxxn pxxn at sina.com
Tue Dec 26 03:14:00 GMT 2000


I read the source of time.c in samba-2.0.7 and I have some confusions 
Concerning function TimeZoneFaster(time_t t) .
In my opinion, I think the purpose of this function is to create a static index table for timezone difference. I entered some  testing value and found the function of the following code was to create a boundedly convergent range which indicated if input time(adjusted) is during this range, zone value in this table item indicates the time differece. The boundedly convergent range indicates the time range for using or not using DST(I think). But I don't know where the algorithm came from for the following code? Could anyone tell me where I can find the regulatin and explanation for this algorithm?
BTW, during my testing process,I found that the boundedly convergent range did not begin at midnight for the DST or non-DST range. :-( How does it happen?
/* no entry will cover more than 6 months */
      low = t - MAX_DST_WIDTH/2;
      if (t < low)
	low = TIME_T_MIN;
      
      high = t + MAX_DST_WIDTH/2;
      if (high < t)
	high = TIME_T_MAX;
      
      /* widen the new entry using two bisection searches */
      while (low+60*60 < dst_table[i].start) {
	if (dst_table[i].start - low > MAX_DST_SKIP*2)
	  t = dst_table[i].start - MAX_DST_SKIP;
	else
	  t = low + (dst_table[i].start-low)/2;
	if (TimeZone(t) == zone)
	  dst_table[i].start = t;
	else
	  low = t;
      }

      while (high-60*60 > dst_table[i].end) {
	if (high - dst_table[i].end > MAX_DST_SKIP*2)
	  t = dst_table[i].end + MAX_DST_SKIP;
	else
	  t = high - (high-dst_table[i].end)/2;
	if (TimeZone(t) == zone)
	  dst_table[i].end = t;
	else
	  high = t;
      }



Any kind of help is greatly appreciated!

thanks,
Dustin

______________________________________

===================================================================
ÐÂÀËÃâ·Ñµç×ÓÓÊÏä http://mail.sina.com.cn

ÄãÑ¡ÊÖ»úÎÒÂòµ¥£¡(http://mall.sina.com.cn/yesmobile/)




More information about the samba mailing list