From 9375a5d47217eea328d334ece74644814d2279d1 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sun, 29 Aug 2021 14:32:12 -0400 Subject: datetime: Make year optional --- diff --git a/src/datetime-formats.c b/src/datetime-formats.c index f79cd67..d3e327b 100644 --- a/src/datetime-formats.c +++ b/src/datetime-formats.c @@ -99,6 +99,24 @@ " %I%M %p %m-%d-%Y ", " %H%M %m-%d-%Y ", +/* 12-31 */ +" %m-%d %I:%M:%S %p ", +" %m-%d %H:%M:%S ", +" %m-%d %I:%M %p ", +" %m-%d %H:%M ", +" %m-%d %I%M%S %p ", +" %m-%d %H%M%S ", +" %m-%d %I%M %p ", +" %m-%d %H%M ", +" %I:%M:%S %p %m-%d ", +" %H:%M:%S %m-%d ", +" %I:%M %p %m-%d ", +" %H:%M %m-%d ", +" %I%M%S %p %m-%d ", +" %H%M%S %m-%d ", +" %I%M %p %m-%d ", +" %H%M %m-%d ", + /* 12/31/1969 */ " %m/%d/%Y %I:%M:%S %p ", " %m/%d/%Y %H:%M:%S ", @@ -117,6 +135,24 @@ " %I%M %p %m/%d/%Y ", " %H%M %m/%d/%Y ", +/* 12/31 */ +" %m/%d %I:%M:%S %p ", +" %m/%d %H:%M:%S ", +" %m/%d %I:%M %p ", +" %m/%d %H:%M ", +" %m/%d %I%M%S %p ", +" %m/%d %H%M%S ", +" %m/%d %I%M %p ", +" %m/%d %H%M ", +" %I:%M:%S %p %m/%d ", +" %H:%M:%S %m/%d ", +" %I:%M %p %m/%d ", +" %H:%M %m/%d ", +" %I%M%S %p %m/%d ", +" %H%M%S %m/%d ", +" %I%M %p %m/%d ", +" %H%M %m/%d ", + /* 31 Dec 1969 */ " %d %b %Y %I:%M:%S %p ", " %d %b %Y %H:%M:%S ", @@ -135,6 +171,24 @@ " %I%M %p %d %b %Y ", " %H%M %d %b %Y ", +/* 31 Dec */ +" %d %b %I:%M:%S %p ", +" %d %b %H:%M:%S ", +" %d %b %I:%M %p ", +" %d %b %H:%M ", +" %d %b %I%M%S %p ", +" %d %b %H%M%S ", +" %d %b %I%M %p ", +" %d %b %H%M ", +" %I:%M:%S %p %d %b ", +" %H:%M:%S %d %b ", +" %I:%M %p %d %b ", +" %H:%M %d %b ", +" %I%M%S %p %d %b ", +" %H%M%S %d %b ", +" %I%M %p %d %b ", +" %H%M %d %b ", + /* 31-Dec-1969 */ " %d-%b-%Y %I:%M:%S %p ", " %d-%b-%Y %H:%M:%S ", @@ -153,6 +207,24 @@ " %I%M %p %d-%b-%Y ", " %H%M %d-%b-%Y ", +/* 31-Dec */ +" %d-%b %I:%M:%S %p ", +" %d-%b %H:%M:%S ", +" %d-%b %I:%M %p ", +" %d-%b %H:%M ", +" %d-%b %I%M%S %p ", +" %d-%b %H%M%S ", +" %d-%b %I%M %p ", +" %d-%b %H%M ", +" %I:%M:%S %p %d-%b ", +" %H:%M:%S %d-%b ", +" %I:%M %p %d-%b ", +" %H:%M %d-%b ", +" %I%M%S %p %d-%b ", +" %H%M%S %d-%b ", +" %I%M %p %d-%b ", +" %H%M %d-%b ", + /* 31/Dec/1969 */ " %d/%b/%Y %I:%M:%S %p ", " %d/%b/%Y %H:%M:%S ", @@ -171,6 +243,24 @@ " %I%M %p %d/%b/%Y ", " %H%M %d/%b/%Y ", +/* 31/Dec */ +" %d/%b %I:%M:%S %p ", +" %d/%b %H:%M:%S ", +" %d/%b %I:%M %p ", +" %d/%b %H:%M ", +" %d/%b %I%M%S %p ", +" %d/%b %H%M%S ", +" %d/%b %I%M %p ", +" %d/%b %H%M ", +" %I:%M:%S %p %d/%b ", +" %H:%M:%S %d/%b ", +" %I:%M %p %d/%b ", +" %H:%M %d/%b ", +" %I%M%S %p %d/%b ", +" %H%M%S %d/%b ", +" %I%M %p %d/%b ", +" %H%M %d/%b ", + /* Wed 31 Dec 1969 */ " %a %d %b %Y %I:%M:%S %p ", " %a %d %b %Y %H:%M:%S ", @@ -189,6 +279,24 @@ " %I%M %p %a %d %b %Y ", " %H%M %a %d %b %Y ", +/* Wed 31 Dec */ +" %a %d %b %I:%M:%S %p ", +" %a %d %b %H:%M:%S ", +" %a %d %b %I:%M %p ", +" %a %d %b %H:%M ", +" %a %d %b %I%M%S %p ", +" %a %d %b %H%M%S ", +" %a %d %b %I%M %p ", +" %a %d %b %H%M ", +" %I:%M:%S %p %a %d %b ", +" %H:%M:%S %a %d %b ", +" %I:%M %p %a %d %b ", +" %H:%M %a %d %b ", +" %I%M%S %p %a %d %b ", +" %H%M%S %a %d %b ", +" %I%M %p %a %d %b ", +" %H%M %a %d %b ", + /* Wed 31-Dec-1969 */ " %a %d-%b-%Y %I:%M:%S %p ", " %a %d-%b-%Y %H:%M:%S ", @@ -207,6 +315,24 @@ " %I%M %p %a %d-%b-%Y ", " %H%M %a %d-%b-%Y ", +/* Wed 31-Dec */ +" %a %d-%b %I:%M:%S %p ", +" %a %d-%b %H:%M:%S ", +" %a %d-%b %I:%M %p ", +" %a %d-%b %H:%M ", +" %a %d-%b %I%M%S %p ", +" %a %d-%b %H%M%S ", +" %a %d-%b %I%M %p ", +" %a %d-%b %H%M ", +" %I:%M:%S %p %a %d-%b ", +" %H:%M:%S %a %d-%b ", +" %I:%M %p %a %d-%b ", +" %H:%M %a %d-%b ", +" %I%M%S %p %a %d-%b ", +" %H%M%S %a %d-%b ", +" %I%M %p %a %d-%b ", +" %H%M %a %d-%b ", + /* Wed 31/Dec/1969 */ " %a %d/%b/%Y %I:%M:%S %p ", " %a %d/%b/%Y %H:%M:%S ", @@ -225,6 +351,24 @@ " %I%M %p %a %d/%b/%Y ", " %H%M %a %d/%b/%Y ", +/* Wed 31/Dec */ +" %a %d/%b %I:%M:%S %p ", +" %a %d/%b %H:%M:%S ", +" %a %d/%b %I:%M %p ", +" %a %d/%b %H:%M ", +" %a %d/%b %I%M%S %p ", +" %a %d/%b %H%M%S ", +" %a %d/%b %I%M %p ", +" %a %d/%b %H%M ", +" %I:%M:%S %p %a %d/%b ", +" %H:%M:%S %a %d/%b ", +" %I:%M %p %a %d/%b ", +" %H:%M %a %d/%b ", +" %I%M%S %p %a %d/%b ", +" %H%M%S %a %d/%b ", +" %I%M %p %a %d/%b ", +" %H%M %a %d/%b ", + /* Wed, 31 Dec 1969 */ " %a, %d %b %Y %I:%M:%S %p ", " %a, %d %b %Y %H:%M:%S ", @@ -243,6 +387,24 @@ " %I%M %p %a, %d %b %Y ", " %H%M %a, %d %b %Y ", +/* Wed, 31 Dec */ +" %a, %d %b %I:%M:%S %p ", +" %a, %d %b %H:%M:%S ", +" %a, %d %b %I:%M %p ", +" %a, %d %b %H:%M ", +" %a, %d %b %I%M%S %p ", +" %a, %d %b %H%M%S ", +" %a, %d %b %I%M %p ", +" %a, %d %b %H%M ", +" %I:%M:%S %p %a, %d %b ", +" %H:%M:%S %a, %d %b ", +" %I:%M %p %a, %d %b ", +" %H:%M %a, %d %b ", +" %I%M%S %p %a, %d %b ", +" %H%M%S %a, %d %b ", +" %I%M %p %a, %d %b ", +" %H%M %a, %d %b ", + /* Wed, 31-Dec-1969 */ " %a, %d-%b-%Y %I:%M:%S %p ", " %a, %d-%b-%Y %H:%M:%S ", @@ -261,6 +423,24 @@ " %I%M %p %a, %d-%b-%Y ", " %H%M %a, %d-%b-%Y ", +/* Wed, 31-Dec */ +" %a, %d-%b %I:%M:%S %p ", +" %a, %d-%b %H:%M:%S ", +" %a, %d-%b %I:%M %p ", +" %a, %d-%b %H:%M ", +" %a, %d-%b %I%M%S %p ", +" %a, %d-%b %H%M%S ", +" %a, %d-%b %I%M %p ", +" %a, %d-%b %H%M ", +" %I:%M:%S %p %a, %d-%b ", +" %H:%M:%S %a, %d-%b ", +" %I:%M %p %a, %d-%b ", +" %H:%M %a, %d-%b ", +" %I%M%S %p %a, %d-%b ", +" %H%M%S %a, %d-%b ", +" %I%M %p %a, %d-%b ", +" %H%M %a, %d-%b ", + /* Wed, 31/Dec/1969 */ " %a, %d/%b/%Y %I:%M:%S %p ", " %a, %d/%b/%Y %H:%M:%S ", @@ -279,6 +459,24 @@ " %I%M %p %a, %d/%b/%Y ", " %H%M %a, %d/%b/%Y ", +/* Wed, 31/Dec */ +" %a, %d/%b %I:%M:%S %p ", +" %a, %d/%b %H:%M:%S ", +" %a, %d/%b %I:%M %p ", +" %a, %d/%b %H:%M ", +" %a, %d/%b %I%M%S %p ", +" %a, %d/%b %H%M%S ", +" %a, %d/%b %I%M %p ", +" %a, %d/%b %H%M ", +" %I:%M:%S %p %a, %d/%b ", +" %H:%M:%S %a, %d/%b ", +" %I:%M %p %a, %d/%b ", +" %H:%M %a, %d/%b ", +" %I%M%S %p %a, %d/%b ", +" %H%M%S %a, %d/%b ", +" %I%M %p %a, %d/%b ", +" %H%M %a, %d/%b ", + /* Dec 31, 1969 */ " %b %d, %Y %I:%M:%S %p ", " %b %d, %Y %H:%M:%S ", @@ -297,6 +495,24 @@ " %I%M %p %b %d, %Y ", " %H%M %b %d, %Y ", +/* Dec 31 */ +" %b %d %I:%M:%S %p ", +" %b %d %H:%M:%S ", +" %b %d %I:%M %p ", +" %b %d %H:%M ", +" %b %d %I%M%S %p ", +" %b %d %H%M%S ", +" %b %d %I%M %p ", +" %b %d %H%M ", +" %I:%M:%S %p %b %d ", +" %H:%M:%S %b %d ", +" %I:%M %p %b %d ", +" %H:%M %b %d ", +" %I%M%S %p %b %d ", +" %H%M%S %b %d ", +" %I%M %p %b %d ", +" %H%M %b %d ", + /* Dec-31-1969 */ " %b-%d-%Y %I:%M:%S %p ", " %b-%d-%Y %H:%M:%S ", @@ -315,6 +531,24 @@ " %I%M %p %b-%d-%Y ", " %H%M %b-%d-%Y ", +/* Dec-31 */ +" %b-%d %I:%M:%S %p ", +" %b-%d %H:%M:%S ", +" %b-%d %I:%M %p ", +" %b-%d %H:%M ", +" %b-%d %I%M%S %p ", +" %b-%d %H%M%S ", +" %b-%d %I%M %p ", +" %b-%d %H%M ", +" %I:%M:%S %p %b-%d ", +" %H:%M:%S %b-%d ", +" %I:%M %p %b-%d ", +" %H:%M %b-%d ", +" %I%M%S %p %b-%d ", +" %H%M%S %b-%d ", +" %I%M %p %b-%d ", +" %H%M %b-%d ", + /* Dec/31/1969 */ " %b/%d/%Y %I:%M:%S %p ", " %b/%d/%Y %H:%M:%S ", @@ -333,6 +567,24 @@ " %I%M %p %b/%d/%Y ", " %H%M %b/%d/%Y ", +/* Dec/31 */ +" %b/%d %I:%M:%S %p ", +" %b/%d %H:%M:%S ", +" %b/%d %I:%M %p ", +" %b/%d %H:%M ", +" %b/%d %I%M%S %p ", +" %b/%d %H%M%S ", +" %b/%d %I%M %p ", +" %b/%d %H%M ", +" %I:%M:%S %p %b/%d ", +" %H:%M:%S %b/%d ", +" %I:%M %p %b/%d ", +" %H:%M %b/%d ", +" %I%M%S %p %b/%d ", +" %H%M%S %b/%d ", +" %I%M %p %b/%d ", +" %H%M %b/%d ", + /* Wed Dec 31, 1969 */ " %a %b %d, %Y %I:%M:%S %p ", " %a %b %d, %Y %H:%M:%S ", @@ -351,6 +603,24 @@ " %I%M %p %a %b %d, %Y ", " %H%M %a %b %d, %Y ", +/* Wed Dec 31 */ +" %a %b %d %I:%M:%S %p ", +" %a %b %d %H:%M:%S ", +" %a %b %d %I:%M %p ", +" %a %b %d %H:%M ", +" %a %b %d %I%M%S %p ", +" %a %b %d %H%M%S ", +" %a %b %d %I%M %p ", +" %a %b %d %H%M ", +" %I:%M:%S %p %a %b %d ", +" %H:%M:%S %a %b %d ", +" %I:%M %p %a %b %d ", +" %H:%M %a %b %d ", +" %I%M%S %p %a %b %d ", +" %H%M%S %a %b %d ", +" %I%M %p %a %b %d ", +" %H%M %a %b %d ", + /* Wed Dec-31-1969 */ " %a %b-%d-%Y %I:%M:%S %p ", " %a %b-%d-%Y %H:%M:%S ", @@ -369,6 +639,24 @@ " %I%M %p %a %b-%d-%Y ", " %H%M %a %b-%d-%Y ", +/* Wed Dec-31 */ +" %a %b-%d %I:%M:%S %p ", +" %a %b-%d %H:%M:%S ", +" %a %b-%d %I:%M %p ", +" %a %b-%d %H:%M ", +" %a %b-%d %I%M%S %p ", +" %a %b-%d %H%M%S ", +" %a %b-%d %I%M %p ", +" %a %b-%d %H%M ", +" %I:%M:%S %p %a %b-%d ", +" %H:%M:%S %a %b-%d ", +" %I:%M %p %a %b-%d ", +" %H:%M %a %b-%d ", +" %I%M%S %p %a %b-%d ", +" %H%M%S %a %b-%d ", +" %I%M %p %a %b-%d ", +" %H%M %a %b-%d ", + /* Wed Dec/31/1969 */ " %a %b/%d/%Y %I:%M:%S %p ", " %a %b/%d/%Y %H:%M:%S ", @@ -387,6 +675,24 @@ " %I%M %p %a %b/%d/%Y ", " %H%M %a %b/%d/%Y ", +/* Wed Dec/31 */ +" %a %b/%d %I:%M:%S %p ", +" %a %b/%d %H:%M:%S ", +" %a %b/%d %I:%M %p ", +" %a %b/%d %H:%M ", +" %a %b/%d %I%M%S %p ", +" %a %b/%d %H%M%S ", +" %a %b/%d %I%M %p ", +" %a %b/%d %H%M ", +" %I:%M:%S %p %a %b/%d ", +" %H:%M:%S %a %b/%d ", +" %I:%M %p %a %b/%d ", +" %H:%M %a %b/%d ", +" %I%M%S %p %a %b/%d ", +" %H%M%S %a %b/%d ", +" %I%M %p %a %b/%d ", +" %H%M %a %b/%d ", + /* Wed, Dec 31, 1969 */ " %a, %b %d, %Y %I:%M:%S %p ", " %a, %b %d, %Y %H:%M:%S ", @@ -405,6 +711,24 @@ " %I%M %p %a, %b %d, %Y ", " %H%M %a, %b %d, %Y ", +/* Wed, Dec 31 */ +" %a, %b %d %I:%M:%S %p ", +" %a, %b %d %H:%M:%S ", +" %a, %b %d %I:%M %p ", +" %a, %b %d %H:%M ", +" %a, %b %d %I%M%S %p ", +" %a, %b %d %H%M%S ", +" %a, %b %d %I%M %p ", +" %a, %b %d %H%M ", +" %I:%M:%S %p %a, %b %d ", +" %H:%M:%S %a, %b %d ", +" %I:%M %p %a, %b %d ", +" %H:%M %a, %b %d ", +" %I%M%S %p %a, %b %d ", +" %H%M%S %a, %b %d ", +" %I%M %p %a, %b %d ", +" %H%M %a, %b %d ", + /* Wed, Dec-31-1969 */ " %a, %b-%d-%Y %I:%M:%S %p ", " %a, %b-%d-%Y %H:%M:%S ", @@ -423,6 +747,24 @@ " %I%M %p %a, %b-%d-%Y ", " %H%M %a, %b-%d-%Y ", +/* Wed, Dec-31 */ +" %a, %b-%d %I:%M:%S %p ", +" %a, %b-%d %H:%M:%S ", +" %a, %b-%d %I:%M %p ", +" %a, %b-%d %H:%M ", +" %a, %b-%d %I%M%S %p ", +" %a, %b-%d %H%M%S ", +" %a, %b-%d %I%M %p ", +" %a, %b-%d %H%M ", +" %I:%M:%S %p %a, %b-%d ", +" %H:%M:%S %a, %b-%d ", +" %I:%M %p %a, %b-%d ", +" %H:%M %a, %b-%d ", +" %I%M%S %p %a, %b-%d ", +" %H%M%S %a, %b-%d ", +" %I%M %p %a, %b-%d ", +" %H%M %a, %b-%d ", + /* Wed, Dec/31/1969 */ " %a, %b/%d/%Y %I:%M:%S %p ", " %a, %b/%d/%Y %H:%M:%S ", @@ -440,3 +782,21 @@ " %H%M%S %a, %b/%d/%Y ", " %I%M %p %a, %b/%d/%Y ", " %H%M %a, %b/%d/%Y ", + +/* Wed, Dec/31 */ +" %a, %b/%d %I:%M:%S %p ", +" %a, %b/%d %H:%M:%S ", +" %a, %b/%d %I:%M %p ", +" %a, %b/%d %H:%M ", +" %a, %b/%d %I%M%S %p ", +" %a, %b/%d %H%M%S ", +" %a, %b/%d %I%M %p ", +" %a, %b/%d %H%M ", +" %I:%M:%S %p %a, %b/%d ", +" %H:%M:%S %a, %b/%d ", +" %I:%M %p %a, %b/%d ", +" %H:%M %a, %b/%d ", +" %I%M%S %p %a, %b/%d ", +" %H%M%S %a, %b/%d ", +" %I%M %p %a, %b/%d ", +" %H%M %a, %b/%d ", diff --git a/src/datetime.c b/src/datetime.c index aa46d59..4041358 100644 --- a/src/datetime.c +++ b/src/datetime.c @@ -39,11 +39,11 @@ datetime_parse(const char *input, time_t *arg_sec) time_t now_sec; struct tm *now_tm; - arg_tm.tm_mday = INT_MIN; /* Sentinel */ - arg_tm.tm_sec = 0; /* Default */ - arg_tm.tm_isdst = -1; - for (i = 0; DATETIME_FMTS_[i] != NULL; ++i) { + arg_tm.tm_year = INT_MIN; /* Sentinel */ + arg_tm.tm_mday = INT_MIN; /* Sentinel */ + arg_tm.tm_sec = 0; /* Default */ + arg_tm.tm_isdst = -1; end = strptime(input, DATETIME_FMTS_[i], &arg_tm); if (end != NULL && *end == '\0') { goto found; @@ -54,7 +54,7 @@ datetime_parse(const char *input, time_t *arg_sec) return -1; found: - /* TODO: Support %a-only dates and optional years */ + /* TODO: Support %a-only dates */ if (arg_tm.tm_mday == INT_MIN) { /* No date specified; try today. */ now_sec = time(NULL); @@ -75,6 +75,18 @@ datetime_parse(const char *input, time_t *arg_sec) arg_tm.tm_mday = now_tm->tm_mday; *arg_sec = mktime(&arg_tm); } + } else if (arg_tm.tm_year == INT_MIN) { + /* No year specified; try this year. */ + now_sec = time(NULL); + now_tm = localtime(&now_sec); + arg_tm.tm_year = now_tm->tm_year; + *arg_sec = mktime(&arg_tm); + if (*arg_sec <= mktime(now_tm)) { + /* Specified time already happened this year; use next + * year. */ + ++arg_tm.tm_year; + *arg_sec = mktime(&arg_tm); + } } else { *arg_sec = mktime(&arg_tm); } -- cgit v0.9.1