xref: /csrg-svn/lib/libc/gen/timezone.c (revision 1993)
1*1993Swnj /* @(#)timezone.c	4.1 (Berkeley) 12/21/80 */
2*1993Swnj /*
3*1993Swnj  * The arguments are the number of minutes of time
4*1993Swnj  * you are westward from Greenwich and whether DST is in effect.
5*1993Swnj  * It returns a string
6*1993Swnj  * giving the name of the local timezone.
7*1993Swnj  *
8*1993Swnj  * Sorry, I don't know all the names.
9*1993Swnj  */
10*1993Swnj 
11*1993Swnj static struct zone {
12*1993Swnj 	int	offset;
13*1993Swnj 	char	*stdzone;
14*1993Swnj 	char	*dlzone;
15*1993Swnj } zonetab[] = {
16*1993Swnj 	4*60, "AST", "ADT",		/* Atlantic */
17*1993Swnj 	5*60, "EST", "EDT",		/* Eastern */
18*1993Swnj 	6*60, "CST", "CDT",		/* Central */
19*1993Swnj 	7*60, "MST", "MDT",		/* Mountain */
20*1993Swnj 	8*60, "PST", "PDT",		/* Pacific */
21*1993Swnj 	0, "GMT", 0,			/* Greenwich */
22*1993Swnj 	-1
23*1993Swnj };
24*1993Swnj 
25*1993Swnj char *timezone(zone, dst)
26*1993Swnj {
27*1993Swnj 	register struct zone *zp;
28*1993Swnj 	static char czone[10];
29*1993Swnj 	char *sign;
30*1993Swnj 
31*1993Swnj 	for (zp=zonetab; zp->offset!=-1; zp++)
32*1993Swnj 		if (zp->offset==zone) {
33*1993Swnj 			if (dst && zp->dlzone)
34*1993Swnj 				return(zp->dlzone);
35*1993Swnj 			if (!dst && zp->stdzone)
36*1993Swnj 				return(zp->stdzone);
37*1993Swnj 		}
38*1993Swnj 	if (zone<0) {
39*1993Swnj 		zone = -zone;
40*1993Swnj 		sign = "+";
41*1993Swnj 	} else
42*1993Swnj 		sign = "-";
43*1993Swnj 	sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60);
44*1993Swnj 	return(czone);
45*1993Swnj }
46