From bf014019579eda6e43d3a1f249065000b30980e8 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Mon, 30 Aug 2021 20:16:25 -0400 Subject: datetime: Replace large list of formats --- (limited to 'src') 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 . - */ - -/* 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 #include #include #include +#include #include #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 -- cgit v0.9.1