Imported Upstream version 1.1.2
[psensor-pkg-ubuntu.git] / src / lib / ptime.c
1 /*
2   Copyright (C) 2010-2014 jeanfi@gmail.com
3
4   This program is free software; you can redistribute it and/or
5   modify it under the terms of the GNU General Public License as
6   published by the Free Software Foundation; either version 2 of the
7   License, or (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful, but
10   WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program; if not, write to the Free Software
16   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17   02110-1301 USA
18  */
19 #include <stdlib.h>
20 #include <string.h>
21
22 #include <ptime.h>
23
24 const int P_TIME_VER = 2;
25
26 static const int ISO8601_TIME_LENGTH = 19; /* YYYY-MM-DDThh:mm:ss */
27 static const int ISO8601_DATE_LENGTH = 10; /* YYYY-MM-DD */
28
29 char *time_to_ISO8601_time(time_t *t)
30 {
31         struct tm lt;
32
33         memset(&lt, 0, sizeof(struct tm));
34         if (!gmtime_r(t, &lt))
35                 return NULL;
36
37         return tm_to_ISO8601_time(&lt);
38 }
39
40 char *time_to_ISO8601_date(time_t *t)
41 {
42         struct tm lt;
43
44         memset(&lt, 0, sizeof(struct tm));
45         if (!gmtime_r(t, &lt))
46                 return NULL;
47
48         return tm_to_ISO8601_date(&lt);
49 }
50
51 char *tm_to_ISO8601_date(struct tm *tm)
52 {
53         char *str;
54
55         str = malloc(ISO8601_DATE_LENGTH + 1);
56
57         if (strftime(str, ISO8601_DATE_LENGTH + 1, "%F", tm))
58                 return str;
59
60         free(str);
61         return NULL;
62 }
63
64 char *tm_to_ISO8601_time(struct tm *tm)
65 {
66         char *str;
67
68         str = malloc(ISO8601_TIME_LENGTH + 1);
69
70         if (strftime(str, ISO8601_TIME_LENGTH + 1, "%FT%T", tm))
71                 return str;
72
73         free(str);
74         return NULL;
75 }
76
77 char *get_current_ISO8601_time()
78 {
79         time_t t;
80
81         t = time(NULL);
82         return time_to_ISO8601_time(&t);
83 }