summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-30 20:16:25 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-30 20:40:01 (EDT)
commitbf014019579eda6e43d3a1f249065000b30980e8 (patch)
tree3d7ac29ffe5afb691a2d83b7f9faa96cc00bfe2e /src
parent2cd65826013df34dc80c7441c4904cfa9c078fa9 (diff)
downloadatsign-bf014019579eda6e43d3a1f249065000b30980e8.zip
atsign-bf014019579eda6e43d3a1f249065000b30980e8.tar.gz
atsign-bf014019579eda6e43d3a1f249065000b30980e8.tar.bz2
datetime: Replace large list of formats
Diffstat (limited to 'src')
-rw-r--r--src/datetime-formats.c816
-rw-r--r--src/datetime.c144
-rw-r--r--src/local.mk3
3 files changed, 131 insertions, 832 deletions
diff --git a/src/datetime-formats.c b/src/datetime-formats.c
deleted file mode 100644
index 55f13f8..0000000
--- a/src/datetime-formats.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/*
- * Copyright (C) 2021 P. J. McDermott
- *
- * This file is part of @
- *
- * @ is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * @ is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with @. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Time only */
-" %I:%M:%S %p ",
-" %H:%M:%S ",
-" %I:%M %p ",
-" %H:%M ",
-" %I%M%S %p ",
-" %H%M%S ",
-" %I%M %p ",
-" %H%M ",
-
-/* Wed */
-" %a %I:%M:%S %p ",
-" %a %H:%M:%S ",
-" %a %I:%M %p ",
-" %a %H:%M ",
-" %a %I%M%S %p ",
-" %a %H%M%S ",
-" %a %I%M %p ",
-" %a %H%M ",
-" %I:%M:%S %p %a ",
-" %H:%M:%S %a ",
-" %I:%M %p %a ",
-" %H:%M %a ",
-" %I%M%S %p %a ",
-" %H%M%S %a ",
-" %I%M %p %a ",
-" %H%M %a ",
-
-/* ISO 8601: 1969-12-31 delimited by "T" */
-" %Y-%m-%dT%H:%M:%S ",
-" %Y-%m-%dT%H:%M ",
-
-/* ISO 8601: 19691231 delimited by "T" */
-" %Y%m%dT%H%M%S ",
-" %Y%m%dT%H%M ",
-
-/* 1969-12-31 */
-" %Y-%m-%d %I:%M:%S %p ",
-" %Y-%m-%d %H:%M:%S ",
-" %Y-%m-%d %I:%M %p ",
-" %Y-%m-%d %H:%M ",
-" %Y-%m-%d %I%M%S %p ",
-" %Y-%m-%d %H%M%S ",
-" %Y-%m-%d %I%M %p ",
-" %Y-%m-%d %H%M ",
-" %I:%M:%S %p %Y-%m-%d ",
-" %H:%M:%S %Y-%m-%d ",
-" %I:%M %p %Y-%m-%d ",
-" %H:%M %Y-%m-%d ",
-" %I%M%S %p %Y-%m-%d ",
-" %H%M%S %Y-%m-%d ",
-" %I%M %p %Y-%m-%d ",
-" %H%M %Y-%m-%d ",
-
-/* 19691231 */
-" %Y%m%d %I%M%S %p ",
-" %Y%m%d %H%M%S ",
-" %Y%m%d %I%M %p ",
-" %Y%m%d %H%M ",
-
-/* 1969/12/31 */
-" %Y/%m/%d %I:%M:%S %p ",
-" %Y/%m/%d %H:%M:%S ",
-" %Y/%m/%d %I:%M %p ",
-" %Y/%m/%d %H:%M ",
-" %Y/%m/%d %I%M%S %p ",
-" %Y/%m/%d %H%M%S ",
-" %Y/%m/%d %I%M %p ",
-" %Y/%m/%d %H%M ",
-" %I:%M:%S %p %Y/%m/%d ",
-" %H:%M:%S %Y/%m/%d ",
-" %I:%M %p %Y/%m/%d ",
-" %H:%M %Y/%m/%d ",
-" %I%M%S %p %Y/%m/%d ",
-" %H%M%S %Y/%m/%d ",
-" %I%M %p %Y/%m/%d ",
-" %H%M %Y/%m/%d ",
-
-/* 12-31-1969 */
-" %m-%d-%Y %I:%M:%S %p ",
-" %m-%d-%Y %H:%M:%S ",
-" %m-%d-%Y %I:%M %p ",
-" %m-%d-%Y %H:%M ",
-" %m-%d-%Y %I%M%S %p ",
-" %m-%d-%Y %H%M%S ",
-" %m-%d-%Y %I%M %p ",
-" %m-%d-%Y %H%M ",
-" %I:%M:%S %p %m-%d-%Y ",
-" %H:%M:%S %m-%d-%Y ",
-" %I:%M %p %m-%d-%Y ",
-" %H:%M %m-%d-%Y ",
-" %I%M%S %p %m-%d-%Y ",
-" %H%M%S %m-%d-%Y ",
-" %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 ",
-" %m/%d/%Y %I:%M %p ",
-" %m/%d/%Y %H:%M ",
-" %m/%d/%Y %I%M%S %p ",
-" %m/%d/%Y %H%M%S ",
-" %m/%d/%Y %I%M %p ",
-" %m/%d/%Y %H%M ",
-" %I:%M:%S %p %m/%d/%Y ",
-" %H:%M:%S %m/%d/%Y ",
-" %I:%M %p %m/%d/%Y ",
-" %H:%M %m/%d/%Y ",
-" %I%M%S %p %m/%d/%Y ",
-" %H%M%S %m/%d/%Y ",
-" %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 ",
-" %d %b %Y %I:%M %p ",
-" %d %b %Y %H:%M ",
-" %d %b %Y %I%M%S %p ",
-" %d %b %Y %H%M%S ",
-" %d %b %Y %I%M %p ",
-" %d %b %Y %H%M ",
-" %I:%M:%S %p %d %b %Y ",
-" %H:%M:%S %d %b %Y ",
-" %I:%M %p %d %b %Y ",
-" %H:%M %d %b %Y ",
-" %I%M%S %p %d %b %Y ",
-" %H%M%S %d %b %Y ",
-" %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 ",
-" %d-%b-%Y %I:%M %p ",
-" %d-%b-%Y %H:%M ",
-" %d-%b-%Y %I%M%S %p ",
-" %d-%b-%Y %H%M%S ",
-" %d-%b-%Y %I%M %p ",
-" %d-%b-%Y %H%M ",
-" %I:%M:%S %p %d-%b-%Y ",
-" %H:%M:%S %d-%b-%Y ",
-" %I:%M %p %d-%b-%Y ",
-" %H:%M %d-%b-%Y ",
-" %I%M%S %p %d-%b-%Y ",
-" %H%M%S %d-%b-%Y ",
-" %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 ",
-" %d/%b/%Y %I:%M %p ",
-" %d/%b/%Y %H:%M ",
-" %d/%b/%Y %I%M%S %p ",
-" %d/%b/%Y %H%M%S ",
-" %d/%b/%Y %I%M %p ",
-" %d/%b/%Y %H%M ",
-" %I:%M:%S %p %d/%b/%Y ",
-" %H:%M:%S %d/%b/%Y ",
-" %I:%M %p %d/%b/%Y ",
-" %H:%M %d/%b/%Y ",
-" %I%M%S %p %d/%b/%Y ",
-" %H%M%S %d/%b/%Y ",
-" %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 ",
-" %a %d %b %Y %I:%M %p ",
-" %a %d %b %Y %H:%M ",
-" %a %d %b %Y %I%M%S %p ",
-" %a %d %b %Y %H%M%S ",
-" %a %d %b %Y %I%M %p ",
-" %a %d %b %Y %H%M ",
-" %I:%M:%S %p %a %d %b %Y ",
-" %H:%M:%S %a %d %b %Y ",
-" %I:%M %p %a %d %b %Y ",
-" %H:%M %a %d %b %Y ",
-" %I%M%S %p %a %d %b %Y ",
-" %H%M%S %a %d %b %Y ",
-" %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 ",
-" %a %d-%b-%Y %I:%M %p ",
-" %a %d-%b-%Y %H:%M ",
-" %a %d-%b-%Y %I%M%S %p ",
-" %a %d-%b-%Y %H%M%S ",
-" %a %d-%b-%Y %I%M %p ",
-" %a %d-%b-%Y %H%M ",
-" %I:%M:%S %p %a %d-%b-%Y ",
-" %H:%M:%S %a %d-%b-%Y ",
-" %I:%M %p %a %d-%b-%Y ",
-" %H:%M %a %d-%b-%Y ",
-" %I%M%S %p %a %d-%b-%Y ",
-" %H%M%S %a %d-%b-%Y ",
-" %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 ",
-" %a %d/%b/%Y %I:%M %p ",
-" %a %d/%b/%Y %H:%M ",
-" %a %d/%b/%Y %I%M%S %p ",
-" %a %d/%b/%Y %H%M%S ",
-" %a %d/%b/%Y %I%M %p ",
-" %a %d/%b/%Y %H%M ",
-" %I:%M:%S %p %a %d/%b/%Y ",
-" %H:%M:%S %a %d/%b/%Y ",
-" %I:%M %p %a %d/%b/%Y ",
-" %H:%M %a %d/%b/%Y ",
-" %I%M%S %p %a %d/%b/%Y ",
-" %H%M%S %a %d/%b/%Y ",
-" %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 ",
-" %a, %d %b %Y %I:%M %p ",
-" %a, %d %b %Y %H:%M ",
-" %a, %d %b %Y %I%M%S %p ",
-" %a, %d %b %Y %H%M%S ",
-" %a, %d %b %Y %I%M %p ",
-" %a, %d %b %Y %H%M ",
-" %I:%M:%S %p %a, %d %b %Y ",
-" %H:%M:%S %a, %d %b %Y ",
-" %I:%M %p %a, %d %b %Y ",
-" %H:%M %a, %d %b %Y ",
-" %I%M%S %p %a, %d %b %Y ",
-" %H%M%S %a, %d %b %Y ",
-" %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 ",
-" %a, %d-%b-%Y %I:%M %p ",
-" %a, %d-%b-%Y %H:%M ",
-" %a, %d-%b-%Y %I%M%S %p ",
-" %a, %d-%b-%Y %H%M%S ",
-" %a, %d-%b-%Y %I%M %p ",
-" %a, %d-%b-%Y %H%M ",
-" %I:%M:%S %p %a, %d-%b-%Y ",
-" %H:%M:%S %a, %d-%b-%Y ",
-" %I:%M %p %a, %d-%b-%Y ",
-" %H:%M %a, %d-%b-%Y ",
-" %I%M%S %p %a, %d-%b-%Y ",
-" %H%M%S %a, %d-%b-%Y ",
-" %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 ",
-" %a, %d/%b/%Y %I:%M %p ",
-" %a, %d/%b/%Y %H:%M ",
-" %a, %d/%b/%Y %I%M%S %p ",
-" %a, %d/%b/%Y %H%M%S ",
-" %a, %d/%b/%Y %I%M %p ",
-" %a, %d/%b/%Y %H%M ",
-" %I:%M:%S %p %a, %d/%b/%Y ",
-" %H:%M:%S %a, %d/%b/%Y ",
-" %I:%M %p %a, %d/%b/%Y ",
-" %H:%M %a, %d/%b/%Y ",
-" %I%M%S %p %a, %d/%b/%Y ",
-" %H%M%S %a, %d/%b/%Y ",
-" %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 ",
-" %b %d, %Y %I:%M %p ",
-" %b %d, %Y %H:%M ",
-" %b %d, %Y %I%M%S %p ",
-" %b %d, %Y %H%M%S ",
-" %b %d, %Y %I%M %p ",
-" %b %d, %Y %H%M ",
-" %I:%M:%S %p %b %d, %Y ",
-" %H:%M:%S %b %d, %Y ",
-" %I:%M %p %b %d, %Y ",
-" %H:%M %b %d, %Y ",
-" %I%M%S %p %b %d, %Y ",
-" %H%M%S %b %d, %Y ",
-" %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 ",
-" %b-%d-%Y %I:%M %p ",
-" %b-%d-%Y %H:%M ",
-" %b-%d-%Y %I%M%S %p ",
-" %b-%d-%Y %H%M%S ",
-" %b-%d-%Y %I%M %p ",
-" %b-%d-%Y %H%M ",
-" %I:%M:%S %p %b-%d-%Y ",
-" %H:%M:%S %b-%d-%Y ",
-" %I:%M %p %b-%d-%Y ",
-" %H:%M %b-%d-%Y ",
-" %I%M%S %p %b-%d-%Y ",
-" %H%M%S %b-%d-%Y ",
-" %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 ",
-" %b/%d/%Y %I:%M %p ",
-" %b/%d/%Y %H:%M ",
-" %b/%d/%Y %I%M%S %p ",
-" %b/%d/%Y %H%M%S ",
-" %b/%d/%Y %I%M %p ",
-" %b/%d/%Y %H%M ",
-" %I:%M:%S %p %b/%d/%Y ",
-" %H:%M:%S %b/%d/%Y ",
-" %I:%M %p %b/%d/%Y ",
-" %H:%M %b/%d/%Y ",
-" %I%M%S %p %b/%d/%Y ",
-" %H%M%S %b/%d/%Y ",
-" %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 ",
-" %a %b %d, %Y %I:%M %p ",
-" %a %b %d, %Y %H:%M ",
-" %a %b %d, %Y %I%M%S %p ",
-" %a %b %d, %Y %H%M%S ",
-" %a %b %d, %Y %I%M %p ",
-" %a %b %d, %Y %H%M ",
-" %I:%M:%S %p %a %b %d, %Y ",
-" %H:%M:%S %a %b %d, %Y ",
-" %I:%M %p %a %b %d, %Y ",
-" %H:%M %a %b %d, %Y ",
-" %I%M%S %p %a %b %d, %Y ",
-" %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 ",
-
-/* Wed Dec-31-1969 */
-" %a %b-%d-%Y %I:%M:%S %p ",
-" %a %b-%d-%Y %H:%M:%S ",
-" %a %b-%d-%Y %I:%M %p ",
-" %a %b-%d-%Y %H:%M ",
-" %a %b-%d-%Y %I%M%S %p ",
-" %a %b-%d-%Y %H%M%S ",
-" %a %b-%d-%Y %I%M %p ",
-" %a %b-%d-%Y %H%M ",
-" %I:%M:%S %p %a %b-%d-%Y ",
-" %H:%M:%S %a %b-%d-%Y ",
-" %I:%M %p %a %b-%d-%Y ",
-" %H:%M %a %b-%d-%Y ",
-" %I%M%S %p %a %b-%d-%Y ",
-" %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 ",
-
-/* Wed Dec/31/1969 */
-" %a %b/%d/%Y %I:%M:%S %p ",
-" %a %b/%d/%Y %H:%M:%S ",
-" %a %b/%d/%Y %I:%M %p ",
-" %a %b/%d/%Y %H:%M ",
-" %a %b/%d/%Y %I%M%S %p ",
-" %a %b/%d/%Y %H%M%S ",
-" %a %b/%d/%Y %I%M %p ",
-" %a %b/%d/%Y %H%M ",
-" %I:%M:%S %p %a %b/%d/%Y ",
-" %H:%M:%S %a %b/%d/%Y ",
-" %I:%M %p %a %b/%d/%Y ",
-" %H:%M %a %b/%d/%Y ",
-" %I%M%S %p %a %b/%d/%Y ",
-" %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 ",
-
-/* Wed, Dec 31, 1969 */
-" %a, %b %d, %Y %I:%M:%S %p ",
-" %a, %b %d, %Y %H:%M:%S ",
-" %a, %b %d, %Y %I:%M %p ",
-" %a, %b %d, %Y %H:%M ",
-" %a, %b %d, %Y %I%M%S %p ",
-" %a, %b %d, %Y %H%M%S ",
-" %a, %b %d, %Y %I%M %p ",
-" %a, %b %d, %Y %H%M ",
-" %I:%M:%S %p %a, %b %d, %Y ",
-" %H:%M:%S %a, %b %d, %Y ",
-" %I:%M %p %a, %b %d, %Y ",
-" %H:%M %a, %b %d, %Y ",
-" %I%M%S %p %a, %b %d, %Y ",
-" %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 ",
-
-/* Wed, Dec-31-1969 */
-" %a, %b-%d-%Y %I:%M:%S %p ",
-" %a, %b-%d-%Y %H:%M:%S ",
-" %a, %b-%d-%Y %I:%M %p ",
-" %a, %b-%d-%Y %H:%M ",
-" %a, %b-%d-%Y %I%M%S %p ",
-" %a, %b-%d-%Y %H%M%S ",
-" %a, %b-%d-%Y %I%M %p ",
-" %a, %b-%d-%Y %H%M ",
-" %I:%M:%S %p %a, %b-%d-%Y ",
-" %H:%M:%S %a, %b-%d-%Y ",
-" %I:%M %p %a, %b-%d-%Y ",
-" %H:%M %a, %b-%d-%Y ",
-" %I%M%S %p %a, %b-%d-%Y ",
-" %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 ",
-
-/* Wed, Dec/31/1969 */
-" %a, %b/%d/%Y %I:%M:%S %p ",
-" %a, %b/%d/%Y %H:%M:%S ",
-" %a, %b/%d/%Y %I:%M %p ",
-" %a, %b/%d/%Y %H:%M ",
-" %a, %b/%d/%Y %I%M%S %p ",
-" %a, %b/%d/%Y %H%M%S ",
-" %a, %b/%d/%Y %I%M %p ",
-" %a, %b/%d/%Y %H%M ",
-" %I:%M:%S %p %a, %b/%d/%Y ",
-" %H:%M:%S %a, %b/%d/%Y ",
-" %I:%M %p %a, %b/%d/%Y ",
-" %H:%M %a, %b/%d/%Y ",
-" %I%M%S %p %a, %b/%d/%Y ",
-" %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 797e955..0be1a4c 100644
--- a/src/datetime.c
+++ b/src/datetime.c
@@ -19,46 +19,164 @@
#define _XOPEN_SOURCE
+#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <time.h>
#include "datetime.h"
-static const char *DATETIME_FMTS_[] = {
-#include "datetime-formats.c"
+/* IMPORTANT: All of the format strings in each array must be padded with spaces
+ * to be of equal lengths */
+static const char *DATETIME_DATE_FMTS_[] = {
+ " ", /* */
+ " %a ", /* Wed */
+ " %Y-%m-%d ", /* 1969-12-31 */
+ " %Y/%m/%d ", /* 1969/12/31 */
+ " %m-%d-%Y ", /* 12-31-1969 */
+ " %m-%d ", /* 12-31 */
+ " %m/%d/%Y ", /* 12/31/1969 */
+ " %m/%d ", /* 12/31 */
+ " %d %b %Y ", /* 31 Dec 1969 */
+ " %d %b ", /* 31 Dec */
+ " %d-%b-%Y ", /* 31-Dec-1969 */
+ " %d-%b ", /* 31-Dec */
+ " %d/%b/%Y ", /* 31/Dec/1969 */
+ " %d/%b ", /* 31/Dec */
+ " %a %d %b %Y ", /* Wed 31 Dec 1969 */
+ " %a %d %b ", /* Wed 31 Dec */
+ " %a %d-%b-%Y ", /* Wed 31-Dec-1969 */
+ " %a %d-%b ", /* Wed 31-Dec */
+ " %a %d/%b/%Y ", /* Wed 31/Dec/1969 */
+ " %a %d/%b ", /* Wed 31/Dec */
+ " %a, %d %b %Y ", /* Wed, 31 Dec 1969 */
+ " %a, %d %b ", /* Wed, 31 Dec */
+ " %a, %d-%b-%Y ", /* Wed, 31-Dec-1969 */
+ " %a, %d-%b ", /* Wed, 31-Dec */
+ " %a, %d/%b/%Y ", /* Wed, 31/Dec/1969 */
+ " %a, %d/%b ", /* Wed, 31/Dec */
+ " %b %d, %Y ", /* Dec 31, 1969 */
+ " %b %d ", /* Dec 31 */
+ " %b-%d-%Y ", /* Dec-31-1969 */
+ " %b-%d ", /* Dec-31 */
+ " %b/%d/%Y ", /* Dec/31/1969 */
+ " %b/%d ", /* Dec/31 */
+ " %a %b %d, %Y ", /* Wed Dec 31, 1969 */
+ " %a %b %d ", /* Wed Dec 31 */
+ " %a %b-%d-%Y ", /* Wed Dec-31-1969 */
+ " %a %b-%d ", /* Wed Dec-31 */
+ " %a %b/%d/%Y ", /* Wed Dec/31/1969 */
+ " %a %b/%d ", /* Wed Dec/31 */
+ " %a, %b %d, %Y ", /* Wed, Dec 31, 1969 */
+ " %a, %b %d ", /* Wed, Dec 31 */
+ " %a, %b-%d-%Y ", /* Wed, Dec-31-1969 */
+ " %a, %b-%d ", /* Wed, Dec-31 */
+ " %a, %b/%d/%Y ", /* Wed, Dec/31/1969 */
+ " %a, %b/%d ", /* Wed, Dec/31 */
NULL
};
+static const char *DATETIME_TIME_FMTS_[] = {
+ " %I:%M:%S %p ", /* 7:00:01 PM */
+ " %H:%M:%S ", /* 19:00:01 */
+ " %I:%M %p ", /* 7:00 PM */
+ " %H:%M ", /* 19:00 */
+ " %I%M%S %p ", /* 70001 PM */
+ " %H%M%S ", /* 190001 */
+ " %I%M %p ", /* 700 PM */
+ " %H%M ", /* 1900 */
+ NULL
+};
+static const char *DATETIME_MISC_FMTS_[] = {
+ /* ISO 8601: 1969-12-31 delimited by "T" */
+ " %Y-%m-%dT%H:%M:%S ",
+ " %Y-%m-%dT%H:%M ",
+ /* ISO 8601: 19691231 delimited by "T" */
+ " %Y%m%dT%H%M%S ",
+ " %Y%m%dT%H%M ",
+ /* 19691231 */
+ " %Y%m%d %I%M%S %p ",
+ " %Y%m%d %H%M%S ",
+ " %Y%m%d %I%M %p ",
+ " %Y%m%d %H%M ",
+ NULL
+};
+
+static void
+_datetime_reset_tm(struct tm *tm)
+{
+ tm->tm_year = INT_MIN;
+ tm->tm_mon = INT_MIN;
+ tm->tm_mday = INT_MIN;
+ tm->tm_wday = INT_MIN;
+ tm->tm_hour = INT_MIN;
+ tm->tm_min = INT_MIN;
+ tm->tm_sec = INT_MIN;
+ tm->tm_isdst = INT_MIN;
+}
int
datetime_parse(const char *input, time_t *arg_sec)
{
- int i;
+ int date_fmt_len;
+ int time_fmt_len;
+ char *fmt_buf;
+ int d;
+ int t;
char *end;
struct tm arg_tm;
time_t now_sec;
struct tm *now_tm;
int wday;
- for (i = 0; DATETIME_FMTS_[i] != NULL; ++i) {
- arg_tm.tm_year = INT_MIN;
- arg_tm.tm_mon = INT_MIN;
- arg_tm.tm_mday = INT_MIN;
- arg_tm.tm_wday = INT_MIN;
- arg_tm.tm_hour = INT_MIN;
- arg_tm.tm_min = INT_MIN;
- arg_tm.tm_sec = INT_MIN;
- arg_tm.tm_isdst = INT_MIN;
- end = strptime(input, DATETIME_FMTS_[i], &arg_tm);
+ date_fmt_len = strlen(DATETIME_DATE_FMTS_[0]);
+ time_fmt_len = strlen(DATETIME_TIME_FMTS_[0]);
+ fmt_buf = calloc(date_fmt_len + time_fmt_len + 1, sizeof(*fmt_buf));
+ if (fmt_buf == NULL) {
+ fprintf(stderr, "Failed to allocate buffer: %s\n",
+ strerror(errno));
+ return -1;
+ }
+
+ for (d = 0; DATETIME_DATE_FMTS_[d] != NULL; ++d) {
+ memcpy(fmt_buf, DATETIME_DATE_FMTS_[d], date_fmt_len);
+ for (t = 0; DATETIME_TIME_FMTS_[t] != NULL; ++t) {
+ memcpy(fmt_buf + date_fmt_len, DATETIME_TIME_FMTS_[t],
+ time_fmt_len);
+ _datetime_reset_tm(&arg_tm);
+ end = strptime(input, fmt_buf, &arg_tm);
+ if (end != NULL && *end == '\0') {
+ goto found;
+ }
+ }
+ }
+ for (t = 0; DATETIME_TIME_FMTS_[t] != NULL; ++t) {
+ memcpy(fmt_buf, DATETIME_TIME_FMTS_[t], time_fmt_len);
+ for (d = 0; DATETIME_DATE_FMTS_[d] != NULL; ++d) {
+ memcpy(fmt_buf + time_fmt_len, DATETIME_DATE_FMTS_[d],
+ date_fmt_len);
+ _datetime_reset_tm(&arg_tm);
+ end = strptime(input, fmt_buf, &arg_tm);
+ if (end != NULL && *end == '\0') {
+ goto found;
+ }
+ }
+ }
+ for (d = 0; DATETIME_MISC_FMTS_[d] != NULL; ++d) {
+ _datetime_reset_tm(&arg_tm);
+ end = strptime(input, DATETIME_MISC_FMTS_[d], &arg_tm);
if (end != NULL && *end == '\0') {
goto found;
}
}
+ free(fmt_buf);
fprintf(stderr, "Unknown date format\n");
return -1;
found:
+ free(fmt_buf);
+
if (arg_tm.tm_sec == INT_MIN) {
arg_tm.tm_sec = 0;
}
diff --git a/src/local.mk b/src/local.mk
index 223a4a2..0882580 100644
--- a/src/local.mk
+++ b/src/local.mk
@@ -2,6 +2,3 @@
%reldir%/datetime.c \
%reldir%/datetime.h \
%reldir%/main.c
-
-EXTRA_DIST += \
- %reldir%/datetime-formats.c