*** dt.c.orig Tue Jan 18 17:25:51 2000 --- dt.c Fri Jan 21 07:12:10 2000 *************** *** 1980,1986 **** --- 1980,1990 ---- {"cdt", DTZ, NEG(30)}, /* Central Daylight Time */ {"cet", TZ, 6}, /* Central European Time */ {"cetdst", DTZ, 12}, /* Central European Dayl.Time */ + #if USE_AUSTRALIAN_RULES + {"cst", TZ, 63}, /* Australia Eastern Std Time */ + #else {"cst", TZ, NEG(36)}, /* Central Standard Time */ + #endif {DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */ {"dec", MONTH, 12}, {"december", MONTH, 12}, *************** *** 1988,1994 **** {"dow", RESERV, DTK_DOW}, /* day of week */ {"doy", RESERV, DTK_DOY}, /* day of year */ {"dst", DTZMOD, 6}, ! {"east", TZ, NEG(60)}, /* East Australian Std Time */ {"edt", DTZ, NEG(24)}, /* Eastern Daylight Time */ {"eet", TZ, 12}, /* East. Europe, USSR Zone 1 */ {"eetdst", DTZ, 18}, /* Eastern Europe */ --- 1992,1998 ---- {"dow", RESERV, DTK_DOW}, /* day of week */ {"doy", RESERV, DTK_DOY}, /* day of year */ {"dst", DTZMOD, 6}, ! {"east", TZ, 60}, /* East Australian Std Time */ {"edt", DTZ, NEG(24)}, /* Eastern Daylight Time */ {"eet", TZ, 12}, /* East. Europe, USSR Zone 1 */ {"eetdst", DTZ, 18}, /* Eastern Europe */ *************** *** 2688,2693 **** --- 2692,2712 ---- if (DecodeTimezone(field[i], tzp) != 0) return -1; tmask = DTK_M(TZ); + + /* + * Swallow an immediately previous timezone if it is GMT + * This handles the odd case in FreeBSD of "GMT+0800" + * but note that we need to flip the sign on this too. + * Claims to be some sort of Posix standard format :( + * - thomas 2000-01-20 + */ + if ((tmask & fmask) && (tzp != NULL) && (*tzp == 0) + && ((*field[i] == '+') || (*field[i] == '-')) + && (i >= 1) && (strcasecmp(field[i-1], "GMT") == 0)) + { + tmask &= ~DTK_M(TZ); + *tzp = -(*tzp); + } break; case DTK_NUMBER: