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