solidc
Robust collection of general-purpose cross-platform C libraries and data structures designed for rapid and safe development in C
Loading...
Searching...
No Matches
xtime.h
Go to the documentation of this file.
1
6#ifndef XTIME_H
7#define XTIME_H
8
9#include <stdbool.h> // for bool
10#include <stdint.h> // for int64_t, uint32_t
11#include <time.h> // for struct tm, time_t
12
13// Definition for strptime on windows.
14#if defined(_MSC_VER)
15#include "./win_strptime.h"
16#endif
17
27#define XTIME_FMT_ISO8601 "%Y-%m-%dT%H:%M:%S" // 2024-11-28T14:30:00
28#define XTIME_FMT_RFC3339 "%Y-%m-%dT%H:%M:%S%z" // 2024-11-28T14:30:00+00:00
29#define XTIME_FMT_RFC2822 "%a, %d %b %Y %H:%M:%S" // Thu, 28 Nov 2024 14:30:00
30#define XTIME_FMT_HTTP "%a, %d %b %Y %H:%M:%S GMT" // HTTP date format
31#define XTIME_FMT_UNIX "%s" // Unix timestamp
32#define XTIME_FMT_DATE "%Y-%m-%d" // 2024-11-28
33#define XTIME_FMT_TIME "%H:%M:%S" // 14:30:00
34#define XTIME_FMT_DATETIME "%Y-%m-%d %H:%M:%S" // 2024-11-28 14:30:00
35
37typedef enum {
38 XTIME_OK = 0, // Operation succeeded
39 XTIME_ERR_INVALID_ARG, // Invalid argument (null pointer, invalid format)
40 XTIME_ERR_PARSE_FAILED, // Failed to parse time string
41 XTIME_ERR_DATE_OUT_OF_RANGE, // Failed to parse time string
42 XTIME_ERR_BUFFER_TOO_SMALL, // Output buffer too small
43 XTIME_ERR_INVALID_TIME, // Time value is invalid or out of range
44 XTIME_ERR_SYSTEM // System call failed (check errno)
46
48typedef struct {
49 int64_t seconds; // Seconds since Unix epoch (can be negative for dates before 1970)
50 uint32_t nanoseconds; // Nanoseconds component [0, 999999999]
51 int16_t tz_offset; // Timezone offset in minutes from UTC [-1439, 1439]
52 bool has_tz; // Whether timezone information is present
53} xtime_t;
54
61
69
76
89xtime_error_t xtime_parse(const char* str, const char* format, xtime_t* t);
90
104xtime_error_t xtime_format(const xtime_t* t, const char* format, char* buf, size_t buflen);
105
114xtime_error_t xtime_format_utc(const xtime_t* t, const char* format, char* buf, size_t buflen);
115
121int64_t xtime_to_unix(const xtime_t* t);
122
132xtime_error_t xtime_to_json(const xtime_t* t, char* buf, size_t buflen);
133
140xtime_error_t xtime_from_unix(int64_t timestamp, xtime_t* t);
141
148xtime_error_t xtime_add_seconds(xtime_t* t, int64_t seconds);
149
156int xtime_compare(const xtime_t* t1, const xtime_t* t2);
157
165xtime_error_t xtime_diff(const xtime_t* t1, const xtime_t* t2, double* diff);
166
172const char* xtime_strerror(xtime_error_t err);
173
174// ============== math calculation helpers =======================
175//================================================================
184
192
200
207xtime_error_t xtime_add_minutes(xtime_t* t, int64_t minutes);
208
215xtime_error_t xtime_add_hours(xtime_t* t, int64_t hours);
216
223xtime_error_t xtime_add_days(xtime_t* t, int64_t days);
224
234
244
253xtime_error_t xtime_diff_nanos(const xtime_t* t1, const xtime_t* t2, int64_t* nanos);
254
263xtime_error_t xtime_diff_micros(const xtime_t* t1, const xtime_t* t2, int64_t* micros);
264
273xtime_error_t xtime_diff_millis(const xtime_t* t1, const xtime_t* t2, int64_t* millis);
274
283xtime_error_t xtime_diff_seconds(const xtime_t* t1, const xtime_t* t2, int64_t* seconds);
284
293xtime_error_t xtime_diff_minutes(const xtime_t* t1, const xtime_t* t2, int64_t* minutes);
294
303xtime_error_t xtime_diff_hours(const xtime_t* t1, const xtime_t* t2, int64_t* hours);
304
313xtime_error_t xtime_diff_days(const xtime_t* t1, const xtime_t* t2, int64_t* days);
314
320bool xtime_is_leap_year(const xtime_t* t);
321
329
337
345
353
362
371
380
389
398
407
408#endif // XTIME_H
xtime_error_t xtime_diff_minutes(const xtime_t *t1, const xtime_t *t2, int64_t *minutes)
Definition xtime.c:758
xtime_error_t xtime_truncate_to_minute(xtime_t *t)
Definition xtime.c:813
xtime_error_t xtime_from_unix(int64_t timestamp, xtime_t *t)
Definition xtime.c:448
xtime_error_t xtime_diff(const xtime_t *t1, const xtime_t *t2, double *diff)
Definition xtime.c:493
xtime_error_t xtime_format_utc(const xtime_t *t, const char *format, char *buf, size_t buflen)
Definition xtime.c:353
bool xtime_is_leap_year(const xtime_t *t)
Definition xtime.c:788
xtime_error_t xtime_add_minutes(xtime_t *t, int64_t minutes)
Definition xtime.c:568
xtime_error_t xtime_end_of_day(const xtime_t *t, xtime_t *result)
Definition xtime.c:934
xtime_error_t xtime_diff_seconds(const xtime_t *t1, const xtime_t *t2, int64_t *seconds)
Definition xtime.c:748
xtime_error_t xtime_utc_now(xtime_t *t)
Definition xtime.c:150
xtime_error_t xtime_parse(const char *str, const char *format, xtime_t *t)
Definition xtime.c:220
xtime_error_t xtime_add_years(xtime_t *t, int years)
Definition xtime.c:651
int xtime_compare(const xtime_t *t1, const xtime_t *t2)
Definition xtime.c:470
xtime_error_t xtime_add_months(xtime_t *t, int months)
Definition xtime.c:592
const char * xtime_strerror(xtime_error_t err)
Definition xtime.c:506
xtime_error_t xtime_truncate_to_hour(xtime_t *t)
Definition xtime.c:826
xtime_error_t xtime_add_milliseconds(xtime_t *t, int64_t millis)
Definition xtime.c:560
xtime_error_t xtime_end_of_month(const xtime_t *t, xtime_t *result)
Definition xtime.c:954
xtime_error_t
Definition xtime.h:37
xtime_error_t xtime_to_json(const xtime_t *t, char *buf, size_t buflen)
Definition xtime.c:384
xtime_error_t xtime_add_nanoseconds(xtime_t *t, int64_t nanos)
Definition xtime.c:529
xtime_error_t xtime_format(const xtime_t *t, const char *format, char *buf, size_t buflen)
Definition xtime.c:303
xtime_error_t xtime_diff_nanos(const xtime_t *t1, const xtime_t *t2, int64_t *nanos)
Definition xtime.c:703
xtime_error_t xtime_start_of_month(const xtime_t *t, xtime_t *result)
Definition xtime.c:880
xtime_error_t xtime_truncate_to_day(xtime_t *t)
Definition xtime.c:839
xtime_error_t xtime_now(xtime_t *t)
Definition xtime.c:94
xtime_error_t xtime_diff_days(const xtime_t *t1, const xtime_t *t2, int64_t *days)
Definition xtime.c:778
xtime_error_t xtime_diff_micros(const xtime_t *t1, const xtime_t *t2, int64_t *micros)
Definition xtime.c:716
xtime_error_t xtime_init(xtime_t *t)
Definition xtime.c:48
xtime_error_t xtime_truncate_to_second(xtime_t *t)
Definition xtime.c:803
xtime_error_t xtime_diff_hours(const xtime_t *t1, const xtime_t *t2, int64_t *hours)
Definition xtime.c:768
xtime_error_t xtime_add_seconds(xtime_t *t, int64_t seconds)
Definition xtime.c:461
xtime_error_t xtime_add_days(xtime_t *t, int64_t days)
Definition xtime.c:584
xtime_error_t xtime_start_of_week(const xtime_t *t, xtime_t *result)
Definition xtime.c:852
int64_t xtime_to_unix(const xtime_t *t)
Definition xtime.c:441
xtime_error_t xtime_add_microseconds(xtime_t *t, int64_t micros)
Definition xtime.c:552
xtime_error_t xtime_diff_millis(const xtime_t *t1, const xtime_t *t2, int64_t *millis)
Definition xtime.c:732
xtime_error_t xtime_end_of_year(const xtime_t *t, xtime_t *result)
Definition xtime.c:993
xtime_error_t xtime_add_hours(xtime_t *t, int64_t hours)
Definition xtime.c:576
xtime_error_t xtime_start_of_year(const xtime_t *t, xtime_t *result)
Definition xtime.c:907