59 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
static struct zonetable {
 | 
						|
	int	offset;
 | 
						|
	char	*stdzone;
 | 
						|
	char	*dstzone;
 | 
						|
} zonetable[] = {
 | 
						|
	-3*60-30, "NST", 0,	/* new foundland ??? */
 | 
						|
	-4*60, "AST", "ADT",	/* atlanic */
 | 
						|
	-5*60, "EST", "EDT",	/* eastern */
 | 
						|
	-6*60, "CST", "CDT",	/* central */
 | 
						|
	-7*60, "MST", "MDT",	/* mountain */
 | 
						|
	-8*60, "PST", "PDT",	/* pacific */
 | 
						|
	-9*60, "YST", "YDT",	/* yukon */
 | 
						|
	-10*60, "AST", "ADT",	/* aleutian */
 | 
						|
	-10*60, "HST", "HDT",	/* hawai, never found */
 | 
						|
	0, "GMT", 0,		/* Greenwich */
 | 
						|
	0, "WET", "WDT",	/* west european, never found */
 | 
						|
	1*60,"MET", "MDT",	/* middle european */
 | 
						|
	2*60, "EET", "EDT",	/* east european */
 | 
						|
	8*60, "WST", 0,	/* west australia */
 | 
						|
	9*60, "JST", 0,	/* japan */
 | 
						|
	9*60+30, "CST", 0,	/* also australia ??? */
 | 
						|
	10*60, "EST", 0,	/* also australia ??? */
 | 
						|
	-1			
 | 
						|
};
 | 
						|
 | 
						|
char *
 | 
						|
timezone(zone, dst)
 | 
						|
{
 | 
						|
	register struct zonetable *p = zonetable;
 | 
						|
	static char buf[16];
 | 
						|
	register char *c;
 | 
						|
	int i;
 | 
						|
 | 
						|
	while (p->offset != -1) {
 | 
						|
		if (zone == -p->offset) {
 | 
						|
			if (dst && p->dstzone) return p->dstzone;
 | 
						|
			if (!dst && p->stdzone) return p->stdzone;
 | 
						|
		}
 | 
						|
		p++;
 | 
						|
	}
 | 
						|
	*c++ = 'G';
 | 
						|
	*c++ = 'M';
 | 
						|
	*c++ = 'T';
 | 
						|
	if (zone < 0) {
 | 
						|
		zone = - zone;
 | 
						|
		*c++ = '+';
 | 
						|
	}
 | 
						|
	else	*c++ = '-';
 | 
						|
	i = (zone / 60) % 24;
 | 
						|
	if (i >= 10) {
 | 
						|
		*c++ = i / 10 + '0';
 | 
						|
	}
 | 
						|
	*c++ = i % 10 + '0';
 | 
						|
	i = zone % 60;
 | 
						|
	*c++ = i / 10 + '0';
 | 
						|
	*c++ = i % 10 + '0';
 | 
						|
	*c = '\0';
 | 
						|
	return buf;
 | 
						|
}
 |