60 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Header$ */
 | |
| 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;
 | |
| }
 |