61 lines
1.3 KiB
C
61 lines
1.3 KiB
C
/* $Header$ */
|
|
static struct zonetable {
|
|
int offset;
|
|
char *stdzone;
|
|
char *dstzone;
|
|
} zonetable[] = {
|
|
-3*60-30, "NST", 0, /* new foundland ??? */
|
|
-4*60, "AST", "ADT", /* atlanic */
|
|
-5*60, "EST", "EDT", /* eastern */
|
|
-6*60, "CST", "CDT", /* central */
|
|
-7*60, "MST", "MDT", /* mountain */
|
|
-8*60, "PST", "PDT", /* pacific */
|
|
-9*60, "YST", "YDT", /* yukon */
|
|
-10*60, "AST", "ADT", /* aleutian */
|
|
-10*60, "HST", "HDT", /* hawai, never found */
|
|
0, "GMT", 0, /* Greenwich */
|
|
0, "WET", "WDT", /* west european, never found */
|
|
1*60,"MET", "MDT", /* middle european */
|
|
2*60, "EET", "EDT", /* east european */
|
|
8*60, "WST", 0, /* west australia */
|
|
9*60, "JST", 0, /* japan */
|
|
9*60+30, "CST", 0, /* also australia ??? */
|
|
10*60, "EST", 0, /* also australia ??? */
|
|
-1
|
|
};
|
|
|
|
char *
|
|
timezone(zone, dst)
|
|
{
|
|
register struct zonetable *p = zonetable;
|
|
static char buf[16];
|
|
register char *c;
|
|
int i;
|
|
|
|
while (p->offset != -1) {
|
|
if (zone == -p->offset) {
|
|
if (dst && p->dstzone) return p->dstzone;
|
|
if (!dst && p->stdzone) return p->stdzone;
|
|
}
|
|
p++;
|
|
}
|
|
*c++ = 'G';
|
|
*c++ = 'M';
|
|
*c++ = 'T';
|
|
if (zone < 0) {
|
|
zone = - zone;
|
|
*c++ = '+';
|
|
}
|
|
else *c++ = '-';
|
|
i = (zone / 60) % 24;
|
|
if (i >= 10) {
|
|
*c++ = i / 10 + '0';
|
|
}
|
|
*c++ = i % 10 + '0';
|
|
i = zone % 60;
|
|
*c++ = i / 10 + '0';
|
|
*c++ = i % 10 + '0';
|
|
*c = '\0';
|
|
return buf;
|
|
}
|