[net.sources.bugs] timezone problems in news 2.10.2

cathy@cs.reading.UUCP (Cathy Garlick) (04/12/85)

We have just installed news 2.10.2 and noticed the following problems
ith timezones.
First there's the fairly well-known one about British Summer Time and
Bering Straits time.
All the European timezones were missing from getdate.y.
So i made the following changes to getdate.y

--------------------------------------------------------------------------------
line 313 in '<', getdate.y.old
changed from line 313 in '>', getdate.y:
< 	{"bst", ZONE, 11 HRS},
---
> 	{"bst", ZONE, -1 HRS},		/* British Summer Time */

lines 320 to 335 in '>', getdate.y
appended after line 319 in getdate.y.old:
> 
> /* European timezones included */
> 
> 	{"eet", ZONE, 0 HRS},		/* European Eastern Time */
> 	{"e.e.t.", ZONE, 0 HRS},
> 	{"eest", ZONE, 0 HRS},		/* European Eastern Summer Time */
> 	{"e.e.s.t.", ZONE, 0 HRS},
> 	{"met", ZONE, -1 HRS},		/* Middle European Time */
> 	{"m.e.t.", ZONE, -1 HRS},
> 	{"mest", DAYZONE, -1 HRS},	/* Middle European Summer Time */
> 	{"m.e.s.t.", DAYZONE, -1 HRS},
> 	{"wet", ZONE, -2 HRS },		/* Western European Time */
> 	{"w.e.t.", ZONE, -2 HRS },
> 	{"west", DAYZONE, -2 HRS},	/* Western European Summer Time */
> 	{"w.e.s.t.", DAYZONE, -2 HRS},
> 
--------------------------------------------------------------------------------
Another problem i found was that the date was always being written as GMT
although we're now in BST, at no point could i find localtime being set
anywhere so i made the following changes to function arpadate in funcs2.c

--------------------------------------------------------------------------------
lines 196 to 198 in '>', funcs2.c
appended after line 195 in funcs2.c.old:
> /* This is the version of arpadate from news.2.10 which uses
>  * localtime
>  */

line 204 in '>', funcs2.c
appended after line 200 in funcs2.c.old:
> 	char *cp;

lines 203 to 204 in '<', funcs2.c.old
changed from lines 207 to 211 in '>', funcs2.c:
< 	extern struct tm *gmtime();
< 	extern char *asctime();
---
> 	struct timeb t;
> 	extern struct tm *localtime();
> 	extern char *ctime();
> 	extern struct timeb *ftime();
> 	extern char *timezone();

lines 206 to 209 in '<', funcs2.c.old
changed from lines 213 to 217 in '>', funcs2.c:
< 	/*  Get current time. This will be used resolve the timezone. */
< 	ud = asctime(gmtime(longtime));
< 
< 	/*  Crack the UNIX date line in a singularly unoriginal way. */
---
> 	/* Get current time. This will be used to resolve the timezone. */
> 	ud = ctime(longtime);
> 	ftime(&t);
> 	
> 	/* Crack the UNIX date line in a singularly unoriginal way. */

lines 213 to 215 in '<', funcs2.c.old
changed from lines 221 to 223 in '>', funcs2.c:
< /* until every site installs the fix to getdate.y, the day
<    of the week can cause time warps */
< 	p = &ud[0];		/* Mon */
---
> /* until every site installs the fix to getdate.y, the day of the week
>    can cause time warps */
> 	p = &ud[0];	/* Mon */

line 222 in '<', funcs2.c.old
changed from line 230 in '>', funcs2.c:
< 	p = &ud[8];		/* 16 */
---
> 	p = &ud[8];	/* 16 */

line 227 in '<', funcs2.c.old
changed from line 235 in '>', funcs2.c:
< 	*q++ = *p++; *q++ = ' ';
---
> 	*q++ = *p++; *q++ = '-';

lines 229 to 230 in '<', funcs2.c.old
changed from lines 237 to 238 in '>', funcs2.c:
< 	p = &ud[4];		/* Sep */
< 	*q++ = *p++; *q++ = *p++; *q++ = *p++; *q++ = ' ';
---
> 	p = &ud[4];	/* Sep */
> 	*q++ = *p++; *q++ = *p++; *q++ = *p++; *q++ = '-';

line 232 in '<', funcs2.c.old
changed from line 240 in '>', funcs2.c:
< 	p = &ud[22];		/* 1979 */
---
> 	p = &ud[22];	/* 1979 */

line 235 in '<', funcs2.c.old
changed from line 243 in '>', funcs2.c:
< 	p = &ud[11];		/* 01:03:52 */
---
> 	p = &ud[11];	/* 01:03:52 */

lines 239 to 242 in '<', funcs2.c.old
changed from lines 247 to 259 in '>', funcs2.c:
< 	*q++ = ' ';
< 	*q++ = 'G';		/* GMT */
< 	*q++ = 'M';
< 	*q++ = 'T';
---
> 	p = timezone(t.timezone, localtime(&t.time)->tm_isdst);
> 	if (p[3] != '\0') {
> 		p+=3;
> 		*q++ = *p++;
> 		if (p[1] == ':')
> 			*q++ = '\0';
> 		else
> 			*q++ = *p++;
> 		*q++ = *p++; p++; *q++ = *p++; *q++ = *p++;
> 	} else {
> 		*q++ = ' '; *q++ = *p++;
> 		*q++ = *p++; *q++ = *p++;
> 	}

lines 244 to 246 in '<', funcs2.c.old
changed from lines 261 to 262 in '>', funcs2.c:
< 
< 	return (b);
< } 
---
> 	return(b);
> }
--------------------------------------------------------------------------------
Cathy Garlick		...ukc!reading!cathy
Comp. Sci Dept. 
Univ. of Reading. UK