]> Kevux Git Server - fll/commitdiff
Feature: add date and time related types.
authorKevin Day <thekevinday@gmail.com>
Tue, 8 Dec 2020 03:57:24 +0000 (21:57 -0600)
committerKevin Day <thekevinday@gmail.com>
Tue, 8 Dec 2020 03:57:24 +0000 (21:57 -0600)
level_0/f_type/c/type.h

index 482d209bd42e269a5dd7eaf31eb9084d4cd2a5ce..b77aa7ea5fe4acadd29cb2c163468913462e4c5c 100644 (file)
@@ -303,6 +303,77 @@ extern "C" {
     mode.unknown = value_unknown;
 #endif // _di_f_directory_mode_
 
+/**
+ * A non-kernel dependent version of "struct timespec".
+ *
+ * seconds:     The total number of seconds.
+ * nanoseconds: The total number of nanoseconds.
+ */
+#ifndef _di_f_time_spec_t_
+  typedef struct {
+    uint64_t seconds;
+    uint64_t nanoseconds;
+  } f_time_spec_t;
+
+  #define f_time_spec_t_initialize { 0, 0 }
+
+  #define f_macro_time_spec_t_clear(spec) \
+    spec.seconds = 0; \
+    spec.nanoseconds = 0;
+#endif // _di_f_time_spec_t_
+
+/**
+ * Hold a unit of Time.
+ *
+ * This utilizes the unit of measurement called a "Time", represented with uppercase "T".
+ * For comparison, a unit of Time is equivalent to a nanosecond, or 10^-9 seconds.
+ *
+ * A unit of Time is intended to represent some unit of Time such that a single 64-bit integer may hold all units of Time for a single calendar year.
+ * This unit of Time does not and must not include Years (unlike Unixtime).
+ *
+ * A MegaTime (MT) is therefore equivalent to a millisecond such that a millisecond is 10^-3 seconds.
+ *
+ * To convert from Time to Unixtime, one must have a year (which could be assumed to be the current year) and then calculate all of those calendar od
+ *
+ * A unit of Time by default is assumed to be in UTC.
+ * 1 (Earth) year ~= 31536000000000000 Time or 31536000 GT (GigaTime).
+ * 1 (Earth) day = 86400000000000 Time or 86400 GT (GigaTime).
+ * 1 (Earth) hour = 3600000000000 Time or 3600 GT (GigaTime).
+ * 1 (Earth) minute = 60000000000 Time or 60 GT (GigaTime).
+ * 1 (Earth) second = 1000000000 Time or 1 GT (GigaTime).
+ *
+ * Consequentially, 1 day in units of Time is easily represented as 86.4 TT (TeraTime).
+ */
+#ifndef _di_f_time_t_
+  typedef uint64_t f_time_t;
+#endif // _di_f_time_t_
+
+/**
+ * Hold a unit of Time along with a year to represent a date.
+ *
+ * This implementation of a date using the unit of Time is limited on the size of the year.
+ * The value for year is expected to be a signed number.
+ * For anything that needs a larger (or smaller) year, create a new type or use the "year string format" of Time.
+ *
+ * In "year string format" of Time, a Year may be prepended to the Time followed by a single colon ':' to associate a year with the Time.
+ * This Year has no minimum or maximum but may not have decimals.
+ *
+ * For example, "2020:86400000000000" would represent: January 02, 2020 0:00 UTC.
+ * For example, "2020:86.4 TT" would represent: January 02, 2020 0:00 UTC.
+ */
+#ifndef _di_f_date_t_
+  typedef struct {
+    f_number_signed_t year;
+    f_time_t time;
+  } f_date_t;
+
+  #define f_date_t_initialize { 0, 0 }
+
+  #define f_macro_date_t_clear(date) \
+    date.year = 0; \
+    date.time = 0;
+#endif // _di_f_date_t_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif