From a853f03d28a8b0c8e3907b5b127dfe41f93d1c1f Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sun, 20 Mar 2022 21:34:24 -0400 Subject: datetime: Print full weekday and month names --- diff --git a/src/datetime.c b/src/datetime.c index b9ab8e5..4c5dd49 100644 --- a/src/datetime.c +++ b/src/datetime.c @@ -78,6 +78,92 @@ static const char *DATETIME_DATE_FMTS_[] = { " %a, %b-%d ", /* Wed, Dec-31 */ " %a, %b/%d/%Y ", /* Wed, Dec/31/1969 */ " %a, %b/%d ", /* Wed, Dec/31 */ + "", /* End of parsing formats */ + " %A ", /* Wednesday */ + " %A %e %b %Y ", /* Wednesday 31 Dec 1969 */ + " %A %e %b ", /* Wednesday 31 Dec */ + " %A %d-%b-%Y ", /* Wednesday 31-Dec-1969 */ + " %A %d-%b ", /* Wednesday 31-Dec */ + " %A %d/%b/%Y ", /* Wednesday 31/Dec/1969 */ + " %A %d/%b ", /* Wednesday 31/Dec */ + " %A, %e %b %Y ", /* Wednesday, 31 Dec 1969 */ + " %A, %e %b ", /* Wednesday, 31 Dec */ + " %A, %d-%b-%Y ", /* Wednesday, 31-Dec-1969 */ + " %A, %d-%b ", /* Wednesday, 31-Dec */ + " %A, %d/%b/%Y ", /* Wednesday, 31/Dec/1969 */ + " %A, %d/%b ", /* Wednesday, 31/Dec */ + " %A %b %e, %Y ", /* Wednesday Dec 31, 1969 */ + " %A %b %e ", /* Wednesday Dec 31 */ + " %A %b-%d-%Y ", /* Wednesday Dec-31-1969 */ + " %A %b-%d ", /* Wednesday Dec-31 */ + " %A %b/%d/%Y ", /* Wednesday Dec/31/1969 */ + " %A %b/%d ", /* Wednesday Dec/31 */ + " %A, %b %e, %Y ", /* Wednesday, Dec 31, 1969 */ + " %A, %b %e ", /* Wednesday, Dec 31 */ + " %A, %b-%d-%Y ", /* Wednesday, Dec-31-1969 */ + " %A, %b-%d ", /* Wednesday, Dec-31 */ + " %A, %b/%d/%Y ", /* Wednesday, Dec/31/1969 */ + " %A, %b/%d ", /* Wednesday, Dec/31 */ + " %e %B %Y ", /* 31 December 1969 */ + " %e %B ", /* 31 December */ + " %d-%B-%Y ", /* 31-December-1969 */ + " %d-%B ", /* 31-December */ + " %d/%B/%Y ", /* 31/December/1969 */ + " %d/%B ", /* 31/December */ + " %a %e %B %Y ", /* Wed 31 December 1969 */ + " %a %e %B ", /* Wed 31 December */ + " %a %d-%B-%Y ", /* Wed 31-December-1969 */ + " %a %d-%B ", /* Wed 31-December */ + " %a %d/%B/%Y ", /* Wed 31/December/1969 */ + " %a %d/%B ", /* Wed 31/December */ + " %a, %e %B %Y ", /* Wed, 31 December 1969 */ + " %a, %e %B ", /* Wed, 31 December */ + " %a, %d-%B-%Y ", /* Wed, 31-December-1969 */ + " %a, %d-%B ", /* Wed, 31-December */ + " %a, %d/%B/%Y ", /* Wed, 31/December/1969 */ + " %a, %d/%B ", /* Wed, 31/December */ + " %B %e, %Y ", /* December 31, 1969 */ + " %B %e ", /* December 31 */ + " %B-%d-%Y ", /* December-31-1969 */ + " %B-%d ", /* December-31 */ + " %B/%d/%Y ", /* December/31/1969 */ + " %B/%d ", /* December/31 */ + " %a %B %e, %Y ", /* Wed December 31, 1969 */ + " %a %B %e ", /* Wed December 31 */ + " %a %B-%d-%Y ", /* Wed December-31-1969 */ + " %a %B-%d ", /* Wed December-31 */ + " %a %B/%d/%Y ", /* Wed December/31/1969 */ + " %a %B/%d ", /* Wed December/31 */ + " %a, %B %e, %Y ", /* Wed, December 31, 1969 */ + " %a, %B %e ", /* Wed, December 31 */ + " %a, %B-%d-%Y ", /* Wed, December-31-1969 */ + " %a, %B-%d ", /* Wed, December-31 */ + " %a, %B/%d/%Y ", /* Wed, December/31/1969 */ + " %a, %B/%d ", /* Wed, December/31 */ + " %A %e %B %Y ", /* Wednesday 31 December 1969 */ + " %A %e %B ", /* Wednesday 31 December */ + " %A %d-%B-%Y ", /* Wednesday 31-December-1969 */ + " %A %d-%B ", /* Wednesday 31-December */ + " %A %d/%B/%Y ", /* Wednesday 31/December/1969 */ + " %A %d/%B ", /* Wednesday 31/December */ + " %A, %e %B %Y ", /* Wednesday, 31 December 1969 */ + " %A, %e %B ", /* Wednesday, 31 December */ + " %A, %d-%B-%Y ", /* Wednesday, 31-December-1969 */ + " %A, %d-%B ", /* Wednesday, 31-December */ + " %A, %d/%B/%Y ", /* Wednesday, 31/December/1969 */ + " %A, %d/%B ", /* Wednesday, 31/December */ + " %A %B %e, %Y ", /* Wednesday December 31, 1969 */ + " %A %B %e ", /* Wednesday December 31 */ + " %A %B-%d-%Y ", /* Wednesday December-31-1969 */ + " %A %B-%d ", /* Wednesday December-31 */ + " %A %B/%d/%Y ", /* Wednesday December/31/1969 */ + " %A %B/%d ", /* Wednesday December/31 */ + " %A, %B %e, %Y ", /* Wednesday, December 31, 1969 */ + " %A, %B %e ", /* Wednesday, December 31 */ + " %A, %B-%d-%Y ", /* Wednesday, December-31-1969 */ + " %A, %B-%d ", /* Wednesday, December-31 */ + " %A, %B/%d/%Y ", /* Wednesday, December/31/1969 */ + " %A, %B/%d ", /* Wednesday, December/31 */ }; static const char *DATETIME_TIME_FMTS_[] = { " %I:%M:%S %p ", /* 7:00:01 PM */ @@ -229,6 +315,9 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) } for (d = 0; d < sizeof(DATETIME_DATE_FMTS_) / sizeof(DATETIME_DATE_FMTS_[0]); ++d) { + if (DATETIME_DATE_FMTS_[d][0] == '\0') { + break; + } memcpy(fmt_buf, DATETIME_DATE_FMTS_[d], date_fmt_len); for (t = 0; t < sizeof(DATETIME_TIME_FMTS_) / sizeof(DATETIME_TIME_FMTS_[0]); ++t) { @@ -252,6 +341,9 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) memcpy(fmt_buf, DATETIME_TIME_FMTS_[t], time_fmt_len); for (d = 0; d < sizeof(DATETIME_DATE_FMTS_) / sizeof(DATETIME_DATE_FMTS_[0]); ++d) { + if (DATETIME_DATE_FMTS_[d][0] == '\0') { + break; + } memcpy(fmt_buf + time_fmt_len, DATETIME_DATE_FMTS_[d], date_fmt_len); _datetime_reset_tm(&arg_tm); @@ -344,6 +436,10 @@ _datetime_strftime(const char *fmts[], const struct tm *tm, char **out, } } + if (fmts[*i][0] == '\0') { + ++*i; + } + resized = 0; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" diff --git a/tests/formats.exp b/tests/formats.exp index 2a8d5c6..502102b 100644 --- a/tests/formats.exp +++ b/tests/formats.exp @@ -58,6 +58,91 @@ Date formats: * Fri, Jan-02 * Fri, Jan/02/1970 * Fri, Jan/02 + * Friday + * Friday 2 Jan 1970 + * Friday 2 Jan + * Friday 02-Jan-1970 + * Friday 02-Jan + * Friday 02/Jan/1970 + * Friday 02/Jan + * Friday, 2 Jan 1970 + * Friday, 2 Jan + * Friday, 02-Jan-1970 + * Friday, 02-Jan + * Friday, 02/Jan/1970 + * Friday, 02/Jan + * Friday Jan 2, 1970 + * Friday Jan 2 + * Friday Jan-02-1970 + * Friday Jan-02 + * Friday Jan/02/1970 + * Friday Jan/02 + * Friday, Jan 2, 1970 + * Friday, Jan 2 + * Friday, Jan-02-1970 + * Friday, Jan-02 + * Friday, Jan/02/1970 + * Friday, Jan/02 + * 2 January 1970 + * 2 January + * 02-January-1970 + * 02-January + * 02/January/1970 + * 02/January + * Fri 2 January 1970 + * Fri 2 January + * Fri 02-January-1970 + * Fri 02-January + * Fri 02/January/1970 + * Fri 02/January + * Fri, 2 January 1970 + * Fri, 2 January + * Fri, 02-January-1970 + * Fri, 02-January + * Fri, 02/January/1970 + * Fri, 02/January + * January 2, 1970 + * January 2 + * January-02-1970 + * January-02 + * January/02/1970 + * January/02 + * Fri January 2, 1970 + * Fri January 2 + * Fri January-02-1970 + * Fri January-02 + * Fri January/02/1970 + * Fri January/02 + * Fri, January 2, 1970 + * Fri, January 2 + * Fri, January-02-1970 + * Fri, January-02 + * Fri, January/02/1970 + * Fri, January/02 + * Friday 2 January 1970 + * Friday 2 January + * Friday 02-January-1970 + * Friday 02-January + * Friday 02/January/1970 + * Friday 02/January + * Friday, 2 January 1970 + * Friday, 2 January + * Friday, 02-January-1970 + * Friday, 02-January + * Friday, 02/January/1970 + * Friday, 02/January + * Friday January 2, 1970 + * Friday January 2 + * Friday January-02-1970 + * Friday January-02 + * Friday January/02/1970 + * Friday January/02 + * Friday, January 2, 1970 + * Friday, January 2 + * Friday, January-02-1970 + * Friday, January-02 + * Friday, January/02/1970 + * Friday, January/02 Additional formats: * 1970-01-02T03:04:05 * 1970-01-02T03:04 -- cgit v0.9.1