Commit | Line | Data |
---|---|---|
bb0cfa24 DF |
1 | /* |
2 | * Copyright (c) 1980 Regents of the University of California. | |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
5 | */ | |
6 | ||
2ce81398 | 7 | #if defined(LIBC_SCCS) && !defined(lint) |
95f51977 | 8 | static char sccsid[] = "@(#)timezone.c 5.2 (Berkeley) 3/9/86"; |
2ce81398 | 9 | #endif LIBC_SCCS and not lint |
bb0cfa24 | 10 | |
9d342dd9 BJ |
11 | /* |
12 | * The arguments are the number of minutes of time | |
13 | * you are westward from Greenwich and whether DST is in effect. | |
14 | * It returns a string | |
15 | * giving the name of the local timezone. | |
16 | * | |
17 | * Sorry, I don't know all the names. | |
18 | */ | |
19 | ||
20 | static struct zone { | |
21 | int offset; | |
22 | char *stdzone; | |
23 | char *dlzone; | |
24 | } zonetab[] = { | |
6114b84d MK |
25 | -1*60, "MET", "MET DST", /* Middle European */ |
26 | -2*60, "EET", "EET DST", /* Eastern European */ | |
9d342dd9 BJ |
27 | 4*60, "AST", "ADT", /* Atlantic */ |
28 | 5*60, "EST", "EDT", /* Eastern */ | |
29 | 6*60, "CST", "CDT", /* Central */ | |
30 | 7*60, "MST", "MDT", /* Mountain */ | |
31 | 8*60, "PST", "PDT", /* Pacific */ | |
7f253f66 SL |
32 | #ifdef notdef |
33 | /* there's no way to distinguish this from WET */ | |
9d342dd9 | 34 | 0, "GMT", 0, /* Greenwich */ |
7f253f66 SL |
35 | #endif |
36 | 0*60, "WET", "WET DST", /* Western European */ | |
bdea7503 SL |
37 | -10*60, "EST", "EST", /* Aust: Eastern */ |
38 | -10*60+30, "CST", "CST", /* Aust: Central */ | |
39 | -8*60, "WST", 0, /* Aust: Western */ | |
9d342dd9 BJ |
40 | -1 |
41 | }; | |
42 | ||
43 | char *timezone(zone, dst) | |
44 | { | |
45 | register struct zone *zp; | |
46 | static char czone[10]; | |
47 | char *sign; | |
bdea7503 SL |
48 | register char *p, *q; |
49 | char *getenv(), *index(); | |
9d342dd9 | 50 | |
bdea7503 SL |
51 | if (p = getenv("TZNAME")) { |
52 | if (q = index(p, ',')) { | |
53 | if (dst) | |
54 | return(++q); | |
55 | else { | |
56 | *q = '\0'; | |
57 | strncpy(czone, p, sizeof(czone)-1); | |
58 | czone[sizeof(czone)-1] = '\0'; | |
59 | *q = ','; | |
60 | return (czone); | |
61 | } | |
62 | } | |
63 | return(p); | |
64 | } | |
9d342dd9 BJ |
65 | for (zp=zonetab; zp->offset!=-1; zp++) |
66 | if (zp->offset==zone) { | |
67 | if (dst && zp->dlzone) | |
68 | return(zp->dlzone); | |
69 | if (!dst && zp->stdzone) | |
70 | return(zp->stdzone); | |
71 | } | |
72 | if (zone<0) { | |
73 | zone = -zone; | |
74 | sign = "+"; | |
75 | } else | |
76 | sign = "-"; | |
77 | sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60); | |
78 | return(czone); | |
79 | } |