|
|
1.1 root 1: /* @(#)timezone.c 4.4 (Berkeley) 9/25/83 */
2: /*
3: * The arguments are the number of minutes of time
4: * you are westward from Greenwich and whether DST is in effect.
5: * It returns a string
6: * giving the name of the local timezone.
7: *
8: * Sorry, I don't know all the names.
9: */
10:
11: static struct zone {
12: int offset;
13: char *stdzone;
14: char *dlzone;
15: } zonetab[] = {
16: -1*60, "MET", "MET DST", /* Middle European */
17: -2*60, "EET", "EET DST", /* Eastern European */
18: 4*60, "AST", "ADT", /* Atlantic */
19: 5*60, "EST", "EDT", /* Eastern */
20: 6*60, "CST", "CDT", /* Central */
21: 7*60, "MST", "MDT", /* Mountain */
22: 8*60, "PST", "PDT", /* Pacific */
23: #ifdef notdef
24: /* there's no way to distinguish this from WET */
25: 0, "GMT", 0, /* Greenwich */
26: #endif
27: 0*60, "WET", "WET DST", /* Western European */
28: -10*60, "EST", "EST", /* Aust: Eastern */
29: -10*60+30, "CST", "CST", /* Aust: Central */
30: -8*60, "WST", 0, /* Aust: Western */
31: -1
32: };
33:
34: char *timezone(zone, dst)
35: {
36: register struct zone *zp;
37: static char czone[10];
38: char *sign;
39: register char *p, *q;
40: char *getenv(), *index();
41:
42: if (p = getenv("TZNAME")) {
43: if (q = index(p, ',')) {
44: if (dst)
45: return(++q);
46: else {
47: *q = '\0';
48: strncpy(czone, p, sizeof(czone)-1);
49: czone[sizeof(czone)-1] = '\0';
50: *q = ',';
51: return (czone);
52: }
53: }
54: return(p);
55: }
56: for (zp=zonetab; zp->offset!=-1; zp++)
57: if (zp->offset==zone) {
58: if (dst && zp->dlzone)
59: return(zp->dlzone);
60: if (!dst && zp->stdzone)
61: return(zp->stdzone);
62: }
63: if (zone<0) {
64: zone = -zone;
65: sign = "+";
66: } else
67: sign = "-";
68: sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60);
69: return(czone);
70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.