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 #ifndef CRM_COMMON_ISO8601
31 # define CRM_COMMON_ISO8601
32
33 # include <time.h>
34 # include <ctype.h>
35 # include <stdbool.h>
36
37 typedef struct crm_time_s crm_time_t;
38
39 typedef struct crm_time_period_s {
40 crm_time_t *start;
41 crm_time_t *end;
42 crm_time_t *diff;
43 } crm_time_period_t;
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 crm_time_t *crm_time_new(const char *string);
62 void crm_time_free(crm_time_t * dt);
63
64 char *crm_time_as_string(crm_time_t * dt, int flags);
65
66 # define crm_time_log(level, prefix, dt, flags) crm_time_log_alias(level, __FILE__, __FUNCTION__, __LINE__, prefix, dt, flags)
67 void crm_time_log_alias(int log_level, const char *file, const char *function, int line,
68 const char *prefix, crm_time_t * date_time, int flags);
69
70 # define crm_time_log_date 0x001
71 # define crm_time_log_timeofday 0x002
72 # define crm_time_log_with_timezone 0x004
73 # define crm_time_log_duration 0x008
74
75 # define crm_time_ordinal 0x010
76 # define crm_time_weeks 0x020
77 # define crm_time_seconds 0x100
78 # define crm_time_epoch 0x200
79
80 crm_time_t *crm_time_parse_duration(const char *duration_str);
81 crm_time_t *crm_time_calculate_duration(crm_time_t * dt, crm_time_t * value);
82 crm_time_period_t *crm_time_parse_period(const char *period_str);
83
84 int crm_time_compare(crm_time_t * dt, crm_time_t * rhs);
85
86 int crm_time_get_timeofday(crm_time_t * dt, uint32_t * h, uint32_t * m, uint32_t * s);
87 int crm_time_get_timezone(crm_time_t * dt, uint32_t * h, uint32_t * m);
88 int crm_time_get_gregorian(crm_time_t * dt, uint32_t * y, uint32_t * m, uint32_t * d);
89 int crm_time_get_ordinal(crm_time_t * dt, uint32_t * y, uint32_t * d);
90 int crm_time_get_isoweek(crm_time_t * dt, uint32_t * y, uint32_t * w, uint32_t * d);
91
92
93 long long int crm_time_get_seconds(crm_time_t * dt);
94
95
96 long long int crm_time_get_seconds_since_epoch(crm_time_t * dt);
97
98 void crm_time_set(crm_time_t * target, crm_time_t * source);
99 void crm_time_set_timet(crm_time_t * target, time_t * source);
100
101
102 crm_time_t *crm_time_add(crm_time_t * dt, crm_time_t * value);
103 crm_time_t *crm_time_subtract(crm_time_t * dt, crm_time_t * value);
104
105
106 void crm_time_add_seconds(crm_time_t * dt, int value);
107 void crm_time_add_minutes(crm_time_t * dt, int value);
108 void crm_time_add_hours(crm_time_t * dt, int value);
109 void crm_time_add_days(crm_time_t * dt, int value);
110 void crm_time_add_weekdays(crm_time_t * dt, int value);
111 void crm_time_add_weeks(crm_time_t * dt, int value);
112 void crm_time_add_months(crm_time_t * dt, int value);
113 void crm_time_add_years(crm_time_t * dt, int value);
114 void crm_time_add_ordinalyears(crm_time_t * dt, int value);
115 void crm_time_add_weekyears(crm_time_t * dt, int value);
116
117
118 int crm_time_january1_weekday(int year);
119 int crm_time_weeks_in_year(int year);
120 int crm_time_days_in_month(int month, int year);
121
122 bool crm_time_leapyear(int year);
123 bool crm_time_check(crm_time_t * dt);
124
125 #endif