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