X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=date.c;h=a74ed86422763e7d7e5dccf73530e52551a6929a;hb=4209752da5a2e327e470493618931a7abbf0a381;hp=316841e8ad3705559fddb0ca4aff969fdf91b011;hpb=30ba3809a4670c99c73800393ce29473c84c8521;p=git.git diff --git a/date.c b/date.c index 316841e8a..a74ed8642 100644 --- a/date.c +++ b/date.c @@ -137,6 +137,18 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode) if (mode == DATE_SHORT) sprintf(timebuf, "%04d-%02d-%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + else if (mode == DATE_ISO8601) + sprintf(timebuf, "%04d-%02d-%02d %02d:%02d:%02d %+05d", + tm->tm_year + 1900, + tm->tm_mon + 1, + tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec, + tz); + else if (mode == DATE_RFC2822) + sprintf(timebuf, "%.3s, %d %.3s %d %02d:%02d:%02d %+05d", + weekday_names[tm->tm_wday], tm->tm_mday, + month_names[tm->tm_mon], tm->tm_year + 1900, + tm->tm_hour, tm->tm_min, tm->tm_sec, tz); else sprintf(timebuf, "%.3s %.3s %d %02d:%02d:%02d %d%c%+05d", weekday_names[tm->tm_wday], @@ -149,21 +161,6 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode) return timebuf; } -const char *show_rfc2822_date(unsigned long time, int tz) -{ - struct tm *tm; - static char timebuf[200]; - - tm = time_to_tm(time, tz); - if (!tm) - return NULL; - sprintf(timebuf, "%.3s, %d %.3s %d %02d:%02d:%02d %+05d", - weekday_names[tm->tm_wday], tm->tm_mday, - month_names[tm->tm_mon], tm->tm_year + 1900, - tm->tm_hour, tm->tm_min, tm->tm_sec, tz); - return timebuf; -} - /* * Check these. And note how it doesn't do the summer-time conversion. * @@ -216,9 +213,9 @@ static const struct { { "EAST", +10, 0, }, /* Eastern Australian Standard */ { "EADT", +10, 1, }, /* Eastern Australian Daylight */ { "GST", +10, 0, }, /* Guam Standard, USSR Zone 9 */ - { "NZT", +11, 0, }, /* New Zealand */ - { "NZST", +11, 0, }, /* New Zealand Standard */ - { "NZDT", +11, 1, }, /* New Zealand Daylight */ + { "NZT", +12, 0, }, /* New Zealand */ + { "NZST", +12, 0, }, /* New Zealand Standard */ + { "NZDT", +12, 1, }, /* New Zealand Daylight */ { "IDLE", +12, 0, }, /* International Date Line East */ }; @@ -587,6 +584,26 @@ int parse_date(const char *date, char *result, int maxlen) return date_string(then, offset, result, maxlen); } +enum date_mode parse_date_format(const char *format) +{ + if (!strcmp(format, "relative")) + return DATE_RELATIVE; + else if (!strcmp(format, "iso8601") || + !strcmp(format, "iso")) + return DATE_ISO8601; + else if (!strcmp(format, "rfc2822") || + !strcmp(format, "rfc")) + return DATE_RFC2822; + else if (!strcmp(format, "short")) + return DATE_SHORT; + else if (!strcmp(format, "local")) + return DATE_LOCAL; + else if (!strcmp(format, "default")) + return DATE_NORMAL; + else + die("unknown date format %s", format); +} + void datestamp(char *buf, int bufsize) { time_t now; @@ -663,6 +680,14 @@ static void date_am(struct tm *tm, int *num) tm->tm_hour = (hour % 12); } +static void date_never(struct tm *tm, int *num) +{ + tm->tm_mon = tm->tm_wday = tm->tm_yday + = tm->tm_hour = tm->tm_min = tm->tm_sec = 0; + tm->tm_year = 70; + tm->tm_mday = 1; +} + static const struct special { const char *name; void (*fn)(struct tm *, int *); @@ -673,6 +698,7 @@ static const struct special { { "tea", date_tea }, { "PM", date_pm }, { "AM", date_am }, + { "never", date_never }, { NULL } };