ack/lang/cem/libcc/stdio/timezone.c

63 lines
1.3 KiB
C
Raw Permalink Normal View History

1994-06-24 14:02:31 +00:00
/* $Id$ */
#ifndef __USG
1987-01-27 15:57:55 +00:00
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;
}
#endif