aboutsummaryrefslogtreecommitdiff
path: root/stdlib/datetime.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-10-27 18:41:00 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-10-27 18:41:00 -0400
commit0d615443dc452f85f3d6b1b2c82d92a9c8db1fff (patch)
tree4fcc37c20916a3abe2bd6413bb129e1a663ed2e8 /stdlib/datetime.c
parentf4d22958f70924f630265467c847d2352f4a34c1 (diff)
Update DateTime API to have separate methods for getting each component
instead of get(...)
Diffstat (limited to 'stdlib/datetime.c')
-rw-r--r--stdlib/datetime.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/stdlib/datetime.c b/stdlib/datetime.c
index 9fa4f8cd..98c23a8e 100644
--- a/stdlib/datetime.c
+++ b/stdlib/datetime.c
@@ -124,6 +124,68 @@ public void DateTime$get(
if (weekday) *weekday = I(info.tm_wday + 1);
}
+public Int_t DateTime$year(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_year + 1900);
+}
+
+public Int_t DateTime$month(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_mon + 1);
+}
+
+public Int_t DateTime$day_of_week(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_wday + 1);
+}
+
+public Int_t DateTime$day_of_month(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_mday);
+}
+
+public Int_t DateTime$day_of_year(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_yday);
+}
+
+public Int_t DateTime$hour(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_hour);
+}
+
+public Int_t DateTime$minute(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_min);
+}
+
+public Int_t DateTime$second(DateTime_t dt, OptionalText_t timezone)
+{
+ struct tm info = {};
+ WITH_TIMEZONE(timezone, localtime_r(&dt.tv_sec, &info));
+ return I(info.tm_sec);
+}
+
+public Int_t DateTime$nanosecond(DateTime_t dt, OptionalText_t timezone)
+{
+ (void)timezone;
+ return I(dt.tv_usec);
+}
+
public Text_t DateTime$format(DateTime_t dt, Text_t fmt, OptionalText_t timezone)
{
struct tm info;