aboutsummaryrefslogtreecommitdiff
path: root/xs_time.h
diff options
context:
space:
mode:
authordefault <nobody@localhost>2025-04-13 09:23:43 +0200
committerdefault <nobody@localhost>2025-04-13 09:23:43 +0200
commit9a238a937e31b36e7ee35109c09764019ee3af1f (patch)
treeffd5f14573655de7c1bfe5e4d77178fbccdb3a5b /xs_time.h
parent8d86cabb0f687a3f80633771b877c6ba3a2c4f70 (diff)
Added some preliminary support for time zones (for scheduled posts).
Diffstat (limited to 'xs_time.h')
-rw-r--r--xs_time.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/xs_time.h b/xs_time.h
index 0e004dc..eaced75 100644
--- a/xs_time.h
+++ b/xs_time.h
@@ -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 */