chiark / gitweb /
Switch to GPL v3
[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.
35 */
36static const char *const datemsk[] = {
37 /* ISO format */
38 "%Y-%m-%d %H:%M:%S",
cca956b1
RK
39 /* Generic time, same day */
40 "%H:%M:%S",
41 "%H:%M",
d436bd52
RK
42 /* "%Y-%m-%d %H:%M:%S %Z" - no, not sensibly supported anywhere */
43 /* Locale-specific date + time */
44 "%c",
45 "%Ec",
46 /* Locale-specific time, same day */
47 "%X",
48 "%EX",
d436bd52
RK
49 NULL,
50};
51
52/** @brief Convert string to a @c time_t */
53time_t dateparse(const char *s) {
54 struct tm t;
55 int rc;
56
57 switch(rc = xgetdate_r(s, &t, datemsk)) {
58 case 0:
59 return mktime(&t);
60 case 7:
61 fatal(0, "date string '%s' not in a recognized format", s);
62 case 8:
63 fatal(0, "date string '%s' not representable", s);
64 default:
65 fatal(0, "date string '%s' produced unexpected error %d", s, rc);
66 }
67}
68
69/*
70Local Variables:
71c-basic-offset:2
72comment-column:40
73fill-column:79
74indent-tabs-mode:nil
75End:
76*/