1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
/* Miscellaneous time-related utilities
*
* Copyright (C) 1998 The Free Software Foundation
*
* Authors: Federico Mena <federico@nuclecu.unam.mx>
* Miguel de Icaza <miguel@nuclecu.unam.mx>
*/
#include <libgnome/libgnome.h>
#include "timeutil.h"
#define digit_at(x,y) (x [y] - '0')
time_t
time_from_isodate (char *str)
{
struct tm my_tm;
time_t t;
my_tm.tm_year = (digit_at (str, 0) * 1000 + digit_at (str, 1) * 100 +
digit_at (str, 2) * 10 + digit_at (str, 3)) - 1900;
my_tm.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) - 1;
my_tm.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7);
my_tm.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10);
my_tm.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12);
my_tm.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14);
my_tm.tm_isdst = -1;
t = mktime (&my_tm);
return t;
}
void
print_time_t (time_t t)
{
struct tm *tm = localtime (&t);
printf ("TIEMPO: %d/%d/%d %d:%d:%d\n",
tm->tm_mon+1, tm->tm_mday, tm->tm_year,
tm->tm_hour, tm->tm_min, tm->tm_sec);
}
int
get_time_t_hour (time_t t)
{
struct tm *tm;
tm = localtime (&t);
return tm->tm_hour;
}
char *
isodate_from_time_t (time_t t)
{
struct tm *tm;
static char isotime [40];
tm = localtime (&t);
strftime (isotime, sizeof (isotime)-1, "%Y%m%dT%H%M%sZ", tm);
return isotime;
}
time_t
time_from_start_duration (time_t start, char *duration)
{
printf ("Not yet implemented\n");
return 0;
}
char *
format_simple_hour (int hour, int use_am_pm)
{
static char buf[256];
/* I don't know whether this is the best way to internationalize it.
* Does any language use different conventions? - Federico
*/
if (use_am_pm)
sprintf (buf, "%d%s",
(hour == 0) ? 12 : (hour > 12) ? (hour - 12) : hour,
(hour < 12) ? _("am") : _("pm"));
else
sprintf (buf, "%02d%s", hour, _("h"));
return buf;
}
time_t
time_add_day (time_t time, int days)
{
struct tm *tm = localtime (&time);
time_t new_time;
tm->tm_mday += days;
if ((new_time = mktime (tm)) == -1){
g_warning ("mktime could not handling adding a day with\n");
print_time_t (time);
return time;
}
return new_time;
}
time_t
time_add_year (time_t time, int years)
{
struct tm *tm = localtime (&time);
time_t new_time;
tm->tm_year += years;
if ((new_time = mktime (tm)) == -1){
g_warning ("mktime could not handling adding a year with\n");
print_time_t (time);
return time;
}
return new_time;
}
|