1
2
3
4
5
6
7
8
9
10 #ifndef PCMK__CRM_COMMON_ISO8601__H
11 # define PCMK__CRM_COMMON_ISO8601__H
12
13 # include <time.h>
14 # include <ctype.h>
15 # include <stdint.h>
16 # include <stdbool.h>
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22
23
24
25
26
27
28
29
30
31
32 typedef struct crm_time_s crm_time_t;
33
34 typedef struct crm_time_period_s {
35 crm_time_t *start;
36 crm_time_t *end;
37 crm_time_t *diff;
38 } crm_time_period_t;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 crm_time_t *crm_time_new(const char *string);
54 crm_time_t *crm_time_new_undefined(void);
55 void crm_time_free(crm_time_t * dt);
56
57 bool crm_time_is_defined(const crm_time_t *t);
58 char *crm_time_as_string(const crm_time_t *dt, int flags);
59
60 #define crm_time_log(level, prefix, dt, flags) \
61 crm_time_log_alias(level, __FILE__, __func__, __LINE__, prefix, dt, flags)
62
63 void crm_time_log_alias(int log_level, const char *file, const char *function,
64 int line, const char *prefix,
65 const crm_time_t *date_time, int flags);
66
67 # define crm_time_log_date 0x001
68 # define crm_time_log_timeofday 0x002
69 # define crm_time_log_with_timezone 0x004
70 # define crm_time_log_duration 0x008
71
72 # define crm_time_ordinal 0x010
73 # define crm_time_weeks 0x020
74 # define crm_time_seconds 0x100
75 # define crm_time_epoch 0x200
76 # define crm_time_usecs 0x400
77
78 crm_time_t *crm_time_parse_duration(const char *duration_str);
79 crm_time_t *crm_time_calculate_duration(const crm_time_t *dt,
80 const crm_time_t *value);
81 crm_time_period_t *crm_time_parse_period(const char *period_str);
82 void crm_time_free_period(crm_time_period_t *period);
83
84 int crm_time_compare(const crm_time_t *a, const crm_time_t *b);
85
86 int crm_time_get_timeofday(const crm_time_t *dt, uint32_t *h, uint32_t *m,
87 uint32_t *s);
88 int crm_time_get_timezone(const crm_time_t *dt, uint32_t *h, uint32_t *m);
89 int crm_time_get_gregorian(const crm_time_t *dt, uint32_t *y, uint32_t *m,
90 uint32_t *d);
91 int crm_time_get_ordinal(const crm_time_t *dt, uint32_t *y, uint32_t *d);
92 int crm_time_get_isoweek(const crm_time_t *dt, uint32_t *y, uint32_t *w,
93 uint32_t * d);
94
95
96 long long crm_time_get_seconds(const crm_time_t *dt);
97
98
99 long long crm_time_get_seconds_since_epoch(const crm_time_t *dt);
100
101 void crm_time_set(crm_time_t *target, const crm_time_t *source);
102 void crm_time_set_timet(crm_time_t *target, const time_t *source);
103
104
105 crm_time_t *pcmk_copy_time(const crm_time_t *source);
106 crm_time_t *crm_time_add(const crm_time_t *dt, const crm_time_t *value);
107 crm_time_t *crm_time_subtract(const crm_time_t *dt, const crm_time_t *value);
108
109
110 void crm_time_add_seconds(crm_time_t * dt, int value);
111 void crm_time_add_minutes(crm_time_t * dt, int value);
112 void crm_time_add_hours(crm_time_t * dt, int value);
113 void crm_time_add_days(crm_time_t * dt, int value);
114 void crm_time_add_weeks(crm_time_t * dt, int value);
115 void crm_time_add_months(crm_time_t * dt, int value);
116 void crm_time_add_years(crm_time_t * dt, int value);
117
118
119 int crm_time_january1_weekday(int year);
120 int crm_time_weeks_in_year(int year);
121 int crm_time_days_in_month(int month, int year);
122
123 bool crm_time_leapyear(int year);
124 bool crm_time_check(const crm_time_t *dt);
125
126 #ifdef __cplusplus
127 }
128 #endif
129
130 #endif