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:759
xtime_error_t xtime_truncate_to_minute(xtime_t *t)
Definition xtime.c:814
xtime_error_t xtime_from_unix(int64_t timestamp, xtime_t *t)
Definition xtime.c:449
xtime_error_t xtime_diff(const xtime_t *t1, const xtime_t *t2, double *diff)
Definition xtime.c:494
xtime_error_t xtime_format_utc(const xtime_t *t, const char *format, char *buf, size_t buflen)
Definition xtime.c:354
bool xtime_is_leap_year(const xtime_t *t)
Definition xtime.c:789
xtime_error_t xtime_add_minutes(xtime_t *t, int64_t minutes)
Definition xtime.c:569
xtime_error_t xtime_end_of_day(const xtime_t *t, xtime_t *result)
Definition xtime.c:935
xtime_error_t xtime_diff_seconds(const xtime_t *t1, const xtime_t *t2, int64_t *seconds)
Definition xtime.c:749
xtime_error_t xtime_utc_now(xtime_t *t)
Definition xtime.c:151
xtime_error_t xtime_parse(const char *str, const char *format, xtime_t *t)
Definition xtime.c:221
xtime_error_t xtime_add_years(xtime_t *t, int years)
Definition xtime.c:652
int xtime_compare(const xtime_t *t1, const xtime_t *t2)
Definition xtime.c:471
xtime_error_t xtime_add_months(xtime_t *t, int months)
Definition xtime.c:593
const char * xtime_strerror(xtime_error_t err)
Definition xtime.c:507
xtime_error_t xtime_truncate_to_hour(xtime_t *t)
Definition xtime.c:827
xtime_error_t xtime_add_milliseconds(xtime_t *t, int64_t millis)
Definition xtime.c:561
xtime_error_t xtime_end_of_month(const xtime_t *t, xtime_t *result)
Definition xtime.c:955
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:385
xtime_error_t xtime_add_nanoseconds(xtime_t *t, int64_t nanos)
Definition xtime.c:530
xtime_error_t xtime_format(const xtime_t *t, const char *format, char *buf, size_t buflen)
Definition xtime.c:304
xtime_error_t xtime_diff_nanos(const xtime_t *t1, const xtime_t *t2, int64_t *nanos)
Definition xtime.c:704
xtime_error_t xtime_start_of_month(const xtime_t *t, xtime_t *result)
Definition xtime.c:881
xtime_error_t xtime_truncate_to_day(xtime_t *t)
Definition xtime.c:840
xtime_error_t xtime_now(xtime_t *t)
Definition xtime.c:95
xtime_error_t xtime_diff_days(const xtime_t *t1, const xtime_t *t2, int64_t *days)
Definition xtime.c:779
xtime_error_t xtime_diff_micros(const xtime_t *t1, const xtime_t *t2, int64_t *micros)
Definition xtime.c:717
xtime_error_t xtime_init(xtime_t *t)
Definition xtime.c:49
xtime_error_t xtime_truncate_to_second(xtime_t *t)
Definition xtime.c:804
xtime_error_t xtime_diff_hours(const xtime_t *t1, const xtime_t *t2, int64_t *hours)
Definition xtime.c:769
xtime_error_t xtime_add_seconds(xtime_t *t, int64_t seconds)
Definition xtime.c:462
xtime_error_t xtime_add_days(xtime_t *t, int64_t days)
Definition xtime.c:585
xtime_error_t xtime_start_of_week(const xtime_t *t, xtime_t *result)
Definition xtime.c:853
int64_t xtime_to_unix(const xtime_t *t)
Definition xtime.c:442
xtime_error_t xtime_add_microseconds(xtime_t *t, int64_t micros)
Definition xtime.c:553
xtime_error_t xtime_diff_millis(const xtime_t *t1, const xtime_t *t2, int64_t *millis)
Definition xtime.c:733
xtime_error_t xtime_end_of_year(const xtime_t *t, xtime_t *result)
Definition xtime.c:994
xtime_error_t xtime_add_hours(xtime_t *t, int64_t hours)
Definition xtime.c:577
xtime_error_t xtime_start_of_year(const xtime_t *t, xtime_t *result)
Definition xtime.c:908