diff options
| author | default <nobody@localhost> | 2025-04-13 09:23:43 +0200 |
|---|---|---|
| committer | default <nobody@localhost> | 2025-04-13 09:23:43 +0200 |
| commit | 9a238a937e31b36e7ee35109c09764019ee3af1f (patch) | |
| tree | ffd5f14573655de7c1bfe5e4d77178fbccdb3a5b /xs_time.h | |
| parent | 8d86cabb0f687a3f80633771b877c6ba3a2c4f70 (diff) | |
Added some preliminary support for time zones (for scheduled posts).
Diffstat (limited to 'xs_time.h')
| -rw-r--r-- | xs_time.h | 71 |
1 files changed, 71 insertions, 0 deletions
@@ -15,6 +15,8 @@ time_t xs_parse_time(const char *str, const char *fmt, int local); #define xs_parse_localtime(str, fmt) xs_parse_time(str, fmt, 1) #define xs_parse_utctime(str, fmt) xs_parse_time(str, fmt, 0) xs_str *xs_str_time_diff(time_t time_diff); +xs_list *xs_tz_list(void); +int xs_tz_offset(const char *tz); #ifdef XS_IMPLEMENTATION @@ -106,6 +108,75 @@ time_t xs_parse_iso_date(const char *iso_date, int local) } +/** timezones **/ + +/* intentionally dead simple */ + +struct { + const char *tz; /* timezone name */ + float h_offset; /* hour offset */ +} xs_tz[] = { + { "UTC", 0 }, + { "GMT", 0 }, + { "GMT+1", -1 }, + { "GMT+2", -2 }, + { "GMT+3", -3 }, + { "GMT+4", -4 }, + { "GMT+5", -5 }, + { "GMT+6", -6 }, + { "GMT+7", -7 }, + { "GMT+8", -8 }, + { "GMT+9", -9 }, + { "GMT+10", -10 }, + { "GMT+11", -11 }, + { "GMT+12", -12 }, + { "GMT-1", 1 }, + { "GMT-2", 2 }, + { "GMT-3", 3 }, + { "GMT-4", 4 }, + { "GMT-5", 5 }, + { "GMT-6", 6 }, + { "GMT-7", 7 }, + { "GMT-8", 8 }, + { "GMT-9", 9 }, + { "GMT-10", 10 }, + { "GMT-11", 11 }, + { "GMT-12", 12 }, + { "GMT-13", 13 }, + { "GMT-14", 14 }, + { "GMT-15", 15 }, + { "CET", -1 }, + { "CST", -6 }, + { "MST", -7 }, + { "PST", -8 }, + { NULL, 0 } +}; + + +xs_list *xs_tz_list(void) +/* returns the list of supported timezones */ +{ + xs_list *l = xs_list_new(); + + for (int n = 0; xs_tz[n].tz != NULL; n++) + l = xs_list_append(l, xs_tz[n].tz); + + return l; +} + + +int xs_tz_offset(const char *tz) +/* returns the offset in seconds from the specified Time Zone to UTC */ +{ + for (int n = 0; xs_tz[n].tz != NULL; n++) { + if (strcmp(xs_tz[n].tz, tz) == 0) + return xs_tz[n].h_offset * 3600; + } + + return 0; +} + + #endif /* XS_IMPLEMENTATION */ #endif /* _XS_TIME_H */ |