XROAD
xroad_time.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include "xroad_common_types.h"
9 #include "xroad_string.h"
10 #include "xroad_tzone.h"
11 #include <stdint.h>
12 #include <time.h>
13 #include <sys/time.h>
14 
15 #define xroad_time_null (xroad_time_t){0}
16 
17 #ifdef __cplusplus
18 extern "C"
19 {
20 #endif
21 
25 typedef struct
26 {
27  uint8_t hour;
28  uint8_t min;
29  uint8_t sec;
30  uint32_t usec;
31  xroad_tzone_t tz;
32 } xroad_time_t;
33 
43 xroad_time_t xroad_time_create(uint8_t hour, uint8_t min, uint8_t sec, uint32_t usec, xroad_tzone_t tz);
44 
51 
58 
64 #define xroad_time_to_str(tm) \
65 ({ \
66  char* buff = (char*)alloca(64); \
67  int32_t s = xroad_format( \
68  buff, 64, "%02d:%02d:%02d", tm.hour, tm.min, tm.sec); \
69  if (tm.usec) \
70  { \
71  s += xroad_format(buff + s, 64 - s, ".%D", tm.usec); \
72  } \
73  if (tm.tz > 0) \
74  { \
75  s += xroad_format(buff + s, 64 - s, " %P", xroad_tzone_get_name(tm.tz)); \
76  } \
77  xroad_str_len(buff, s); \
78 })
79 
85 #define xroad_time_to_sql(v) \
86 ({ \
87  char* buf = "NULL"; \
88  uint32_t len = 4; \
89  xroad_time_t dt = (v); \
90  if (!xroad_time_is_null(dt)) \
91  { \
92  xroad_str_t s = xroad_time_to_str(dt); \
93  buf = alloca(s.len + 2); \
94  buf[0] = '\''; \
95  memcpy(buf + 1, s.data, s.len); \
96  buf[s.len + 1] = '\''; \
97  len = s.len + 2; \
98  } \
99  xroad_str_len(buf, len); \
100 })
101 
109 
117 
125 
132 
139 
146 xroad_time_t xroad_time_from_ts(xroad_timestamp_t ts, xroad_tzone_t tz);
147 
153 xroad_timestamp_t xroad_time_to_ts(xroad_time_t time);
154 
160 xroad_time_t xroad_time_now(xroad_tzone_t tz);
161 
169 
177 
185 
189 xroad_timestamp_t xroad_now();
190 
194 xroad_timestamp_t xroad_now_nano();
195 
199 xroad_timestamp_t xroad_now_sec();
200 
205 xroad_timestamp_t xroad_now_monotonic(void);
206 
211 int64_t xroad_time_start_of_day(time_t now);
212 
213 #ifdef __cplusplus
214 }
215 #endif
Definition: xroad_string.h:29
Definition: xroad_time.h:26
bool xroad_time_is_null(xroad_time_t time)
xroad_time_t xroad_time_from_ts(xroad_timestamp_t ts, xroad_tzone_t tz)
xroad_timestamp_t xroad_now_monotonic(void)
xroad_timestamp_t xroad_now_nano()
xroad_time_t xroad_time_change_tz(xroad_time_t tm, xroad_tzone_t new_tz)
xroad_time_t xroad_time_from_str(xroad_str_t time)
xroad_time_t xroad_time_min(xroad_time_t a, xroad_time_t b)
int64_t xroad_time_start_of_day(time_t now)
int64_t xroad_time_to_usec(xroad_time_t time)
int64_t xroad_time_distance(xroad_time_t a, xroad_time_t b)
xroad_time_t xroad_time_create(uint8_t hour, uint8_t min, uint8_t sec, uint32_t usec, xroad_tzone_t tz)
xroad_time_t xroad_time_now(xroad_tzone_t tz)
xroad_timestamp_t xroad_now_sec()
xroad_timestamp_t xroad_time_to_ts(xroad_time_t time)
xroad_time_t xroad_time_max(xroad_time_t a, xroad_time_t b)
xroad_timestamp_t xroad_now()
int64_t xroad_time_cmp(xroad_time_t lhs, xroad_time_t rhs)
xroad_time_t xroad_time_adjust(xroad_time_t time, int64_t usec)