avoid 'reload' to show local fs
[prss.git] / src / 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         } else {
60                 free(str);
61                 return NULL;
62         }
63 }
64
65 char *tm_to_ISO8601_time(struct tm *tm)
66 {
67         char *str;
68
69         str = malloc(ISO8601_TIME_LENGTH + 1);
70
71         if (strftime(str, ISO8601_TIME_LENGTH + 1, "%FT%T", tm)) {
72                 return str;
73         } else {
74                 free(str);
75                 return NULL;
76         }
77 }
78
79 char *get_current_ISO8601_time()
80 {
81         time_t t;
82
83         t = time(NULL);
84         return time_to_ISO8601_time(&t);
85 }