summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2022-03-20 21:34:24 (EDT)
committer P. J. McDermott <pj@pehjota.net>2022-03-20 21:34:24 (EDT)
commita853f03d28a8b0c8e3907b5b127dfe41f93d1c1f (patch)
tree112d07a39da62b90b2dfb43931cdf51674541fe2
parentf6c172671c22c50e2f4425949c70230e3c19c7a7 (diff)
downloadatsign-a853f03d28a8b0c8e3907b5b127dfe41f93d1c1f.zip
atsign-a853f03d28a8b0c8e3907b5b127dfe41f93d1c1f.tar.gz
atsign-a853f03d28a8b0c8e3907b5b127dfe41f93d1c1f.tar.bz2
datetime: Print full weekday and month names
-rw-r--r--src/datetime.c96
-rw-r--r--tests/formats.exp85
2 files changed, 181 insertions, 0 deletions
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