aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/subsurface-time.h2
-rw-r--r--core/time.c30
2 files changed, 32 insertions, 0 deletions
diff --git a/core/subsurface-time.h b/core/subsurface-time.h
index 38d6c10de..ce2821d07 100644
--- a/core/subsurface-time.h
+++ b/core/subsurface-time.h
@@ -11,6 +11,8 @@ extern "C" {
extern timestamp_t utc_mktime(struct tm *tm);
extern void utc_mkdate(timestamp_t, struct tm *tm);
+extern int utc_year(timestamp_t timestamp);
+extern int utc_weekday(timestamp_t timestamp);
#ifdef __cplusplus
}
diff --git a/core/time.c b/core/time.c
index d339ffa30..94149342a 100644
--- a/core/time.c
+++ b/core/time.c
@@ -133,3 +133,33 @@ timestamp_t utc_mktime(struct tm *tm)
return when - EPOCH_OFFSET;
}
+
+/*
+ * Extract year from 64-bit timestamp.
+ *
+ * This looks inefficient, since it breaks down into a full
+ * struct tm. However, modern compilers are effective at throwing
+ * out unused calculations. If it turns out to be a bottle neck
+ * we will have to cache a struct tm per dive.
+ */
+int utc_year(timestamp_t timestamp)
+{
+ struct tm tm;
+ utc_mkdate(timestamp, &tm);
+ return tm.tm_year;
+}
+
+/*
+ * Extract day of week from 64-bit timestamp.
+ * Returns 0-6, whereby 0 is Sunday and 6 is Saturday.
+ *
+ * Same comment as for utc_year(): Modern compilers are good
+ * at throwing out unused calculations, so this is more efficient
+ * than it looks.
+ */
+int utc_weekday(timestamp_t timestamp)
+{
+ struct tm tm;
+ utc_mkdate(timestamp, &tm);
+ return tm.tm_wday;
+}