summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-29 14:32:12 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-29 15:58:36 (EDT)
commit9375a5d47217eea328d334ece74644814d2279d1 (patch)
tree51f9d37fe047df2193318fdf5a939a631249a8f4
parentedc780c6a1406de34d111bc327ee8a534fb0d613 (diff)
downloadatsign-9375a5d47217eea328d334ece74644814d2279d1.zip
atsign-9375a5d47217eea328d334ece74644814d2279d1.tar.gz
atsign-9375a5d47217eea328d334ece74644814d2279d1.tar.bz2
datetime: Make year optional
-rw-r--r--src/datetime-formats.c360
-rw-r--r--src/datetime.c22
2 files changed, 377 insertions, 5 deletions
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);
}