xref: /csrg-svn/lib/libc/gen/timezone.c (revision 12974)
1*12974Ssam /* @(#)timezone.c	4.2 (Berkeley) 06/10/83 */
21993Swnj /*
31993Swnj  * The arguments are the number of minutes of time
41993Swnj  * you are westward from Greenwich and whether DST is in effect.
51993Swnj  * It returns a string
61993Swnj  * giving the name of the local timezone.
71993Swnj  *
81993Swnj  * Sorry, I don't know all the names.
91993Swnj  */
101993Swnj 
111993Swnj static struct zone {
121993Swnj 	int	offset;
131993Swnj 	char	*stdzone;
141993Swnj 	char	*dlzone;
151993Swnj } zonetab[] = {
161993Swnj 	4*60, "AST", "ADT",		/* Atlantic */
171993Swnj 	5*60, "EST", "EDT",		/* Eastern */
181993Swnj 	6*60, "CST", "CDT",		/* Central */
191993Swnj 	7*60, "MST", "MDT",		/* Mountain */
201993Swnj 	8*60, "PST", "PDT",		/* Pacific */
211993Swnj 	0, "GMT", 0,			/* Greenwich */
22*12974Ssam 	-10*60, "EST", "EST",		/* Aust: Eastern */
23*12974Ssam 	-10*60+30, "CST", "CST",	/* Aust: Central */
24*12974Ssam 	-8*60, "WST", 0,		/* Aust: Western */
251993Swnj 	-1
261993Swnj };
271993Swnj 
281993Swnj char *timezone(zone, dst)
291993Swnj {
301993Swnj 	register struct zone *zp;
311993Swnj 	static char czone[10];
321993Swnj 	char *sign;
33*12974Ssam 	register char *p, *q;
34*12974Ssam 	char *getenv(), *index();
351993Swnj 
36*12974Ssam 	if (p = getenv("TZNAME")) {
37*12974Ssam 		if (q = index(p, ',')) {
38*12974Ssam 			if (dst)
39*12974Ssam 				return(++q);
40*12974Ssam 			else {
41*12974Ssam 				*q = '\0';
42*12974Ssam 				strncpy(czone, p, sizeof(czone)-1);
43*12974Ssam 				czone[sizeof(czone)-1] = '\0';
44*12974Ssam 				*q = ',';
45*12974Ssam 				return (czone);
46*12974Ssam 			}
47*12974Ssam 		}
48*12974Ssam 		return(p);
49*12974Ssam 	}
501993Swnj 	for (zp=zonetab; zp->offset!=-1; zp++)
511993Swnj 		if (zp->offset==zone) {
521993Swnj 			if (dst && zp->dlzone)
531993Swnj 				return(zp->dlzone);
541993Swnj 			if (!dst && zp->stdzone)
551993Swnj 				return(zp->stdzone);
561993Swnj 		}
571993Swnj 	if (zone<0) {
581993Swnj 		zone = -zone;
591993Swnj 		sign = "+";
601993Swnj 	} else
611993Swnj 		sign = "-";
621993Swnj 	sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60);
631993Swnj 	return(czone);
641993Swnj }
65