chiark / gitweb /
Disobedience: basic support for required/prohibited tags.
[disorder] / lib / dateparse.c
CommitLineData
d436bd52
RK
1/*
2 * This file is part of DisOrder
3 * Copyright (C) 2008 Richard Kettlewell
4 *
e7eb3a27 5 * This program is free software: you can redistribute it and/or modify
d436bd52 6 * it under the terms of the GNU General Public License as published by
e7eb3a27 7 * the Free Software Foundation, either version 3 of the License, or
d436bd52 8 * (at your option) any later version.
e7eb3a27
RK
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
d436bd52 15 * You should have received a copy of the GNU General Public License
e7eb3a27 16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
d436bd52
RK
17 */
18
19/** @file lib/dateparse.c
20 * @brief Date parsing
21 */
22
05b75f8d 23#include "common.h"
d436bd52
RK
24
25#include <time.h>
26
27#include "dateparse.h"
28#include "log.h"
29
30/** @brief Date parsing patterns
31 *
32 * This set of patterns is designed to parse a specific time of a specific day,
33 * since that's what the scheduler needs. Other requirements might need other
34 * pattern lists.
477f956c
RK
35 *
36 * NB DisOrder now uses my_strptime() instead of the system strptime(). This
37 * has some bits missing. Therefore check carefuly before adding to this
38 * table.
d436bd52
RK
39 */
40static const char *const datemsk[] = {
41 /* ISO format */
42 "%Y-%m-%d %H:%M:%S",
cca956b1
RK
43 /* Generic time, same day */
44 "%H:%M:%S",
45 "%H:%M",
d436bd52
RK
46 /* "%Y-%m-%d %H:%M:%S %Z" - no, not sensibly supported anywhere */
47 /* Locale-specific date + time */
48 "%c",
49 "%Ec",
50 /* Locale-specific time, same day */
51 "%X",
52 "%EX",
d436bd52
RK
53 NULL,
54};
55
56/** @brief Convert string to a @c time_t */
57time_t dateparse(const char *s) {
58 struct tm t;
59 int rc;
60
61 switch(rc = xgetdate_r(s, &t, datemsk)) {
62 case 0:
63 return mktime(&t);
64 case 7:
2e9ba080 65 disorder_fatal(0, "date string '%s' not in a recognized format", s);
d436bd52 66 case 8:
2e9ba080 67 disorder_fatal(0, "date string '%s' not representable", s);
d436bd52 68 default:
2e9ba080 69 disorder_fatal(0, "date string '%s' produced unexpected error %d", s, rc);
d436bd52
RK
70 }
71}
72
73/*
74Local Variables:
75c-basic-offset:2
76comment-column:40
77fill-column:79
78indent-tabs-mode:nil
79End:
80*/