Initial revision
This commit is contained in:
59
lang/cem/libcc/stdio/timezone.c
Normal file
59
lang/cem/libcc/stdio/timezone.c
Normal file
@@ -0,0 +1,59 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user