XROAD
xroad_datetime.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include <stdint.h>
9 #include "xroad_time.h"
10 #include "xroad_date.h"
11 #include "xroad_tzone.h"
12 
13 #define xroad_datetime_null (xroad_datetime_t){0}
14 
15 #ifdef __cplusplus
16 extern "C"
17 {
18 #endif
19 
20 typedef struct
21 {
22  uint16_t year;
23  uint8_t month;
24  uint8_t day;
25  uint8_t hour;
26  uint8_t min;
27  uint8_t sec;
28  uint32_t usec;
29  xroad_tzone_t tz;
31 
36 xroad_datetime_t xroad_datetime_create(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min,
37  uint8_t sec, uint32_t usec, xroad_tzone_t tz);
38 
45 
51 xroad_timestamp_t xroad_datetime_to_ts(xroad_datetime_t dt);
52 
59 xroad_datetime_t xroad_datetime_from_ts(xroad_timestamp_t ts, xroad_tzone_t tz);
60 
67 
73 #define xroad_datetime_to_str(dt) \
74 ({ \
75  char* buff = (char*)alloca(64); \
76  int32_t s = xroad_format(buff, 64, "%04d-%02d-%02d %02d:%02d:%02d", \
77  dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec); \
78  if (dt.usec) \
79  { \
80  s += xroad_format(buff + s, 64 - s, ".%D", dt.usec); \
81  } \
82  if (dt.tz) \
83  { \
84  s += xroad_format(buff + s, 64 - s, " %P", xroad_tzone_get_name(dt.tz)); \
85  } \
86  xroad_str_len(buff, s); \
87 })
88 
94 #define xroad_datetime_to_sql(v) \
95 ({ \
96  char* buf = "NULL"; \
97  uint32_t len = 4; \
98  xroad_datetime_t dt = (v); \
99  if (!xroad_datetime_is_null(dt)) \
100  { \
101  xroad_str_t s = xroad_datetime_to_str(dt); \
102  buf = alloca(s.len + 2); \
103  buf[0] = '\''; \
104  memcpy(buf + 1, s.data, s.len); \
105  buf[s.len + 1] = '\''; \
106  len = s.len + 2; \
107  } \
108  xroad_str_len(buf, len); \
109 })
110 
118 
125 
132 
139 
146 
153 
161 
162 #ifdef __cplusplus
163 }
164 #endif
Definition: xroad_date.h:20
Definition: xroad_datetime.h:21
Definition: xroad_string.h:29
Definition: xroad_time.h:26
xroad_datetime_t xroad_datetime_from_parts(xroad_date_t date, xroad_time_t time)
int64_t xroad_datetime_cmp(xroad_datetime_t lhs, xroad_datetime_t rhs)
void xroad_datetime_set_date(xroad_datetime_t *dt, xroad_date_t date)
xroad_datetime_t xroad_datetime_create(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec, uint32_t usec, xroad_tzone_t tz)
xroad_timestamp_t xroad_datetime_to_ts(xroad_datetime_t dt)
xroad_date_t xroad_datetime_get_date(xroad_datetime_t dt)
xroad_time_t xroad_datetime_get_time(xroad_datetime_t dt)
void xroad_datetime_set_time(xroad_datetime_t *dt, xroad_time_t time)
xroad_datetime_t xroad_datetime_from_str(xroad_str_t date)
xroad_datetime_t xroad_datetime_now(xroad_tzone_t tz)
xroad_datetime_t xroad_datetime_from_ts(xroad_timestamp_t ts, xroad_tzone_t tz)
bool xroad_datetime_is_null(xroad_datetime_t dt)