|
@@ -348,7 +348,33 @@ clock :: proc { clock_from_time, clock_from_duration, clock_from_stopwatch }
|
|
|
Obtain the time components from a time.
|
|
|
*/
|
|
|
clock_from_time :: proc "contextless" (t: Time) -> (hour, min, sec: int) {
|
|
|
- return clock_from_seconds(_time_abs(t))
|
|
|
+ hour, min, sec, _ = precise_clock_from_time(t)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+Obtain the time components from a time, including nanoseconds.
|
|
|
+*/
|
|
|
+precise_clock_from_time :: proc "contextless" (t: Time) -> (hour, min, sec, nanos: int) {
|
|
|
+ // Time in nanoseconds since 1-1-1970 00:00
|
|
|
+ nanos = int(t._nsec)
|
|
|
+ // Time in seconds
|
|
|
+ sec = nanos / 1e9
|
|
|
+ // Remaining nanoseconds after whole seconds subtracted
|
|
|
+ nanos -= sec * 1e9
|
|
|
+ // Add offset to seconds
|
|
|
+ sec += int(UNIX_TO_ABSOLUTE)
|
|
|
+ // Divide out the days and just keep the seconds within the day
|
|
|
+ sec %= 86_400
|
|
|
+ // How many hours in those seconds?
|
|
|
+ hour = sec / 3_600
|
|
|
+ // Remove those hourly seconds
|
|
|
+ sec -= hour * 3_600
|
|
|
+ // How many minutes left?
|
|
|
+ min = sec / 60
|
|
|
+ // Subtract minutely seconds
|
|
|
+ sec -= min * 60
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -358,6 +384,13 @@ clock_from_duration :: proc "contextless" (d: Duration) -> (hour, min, sec: int)
|
|
|
return clock_from_seconds(u64(d/1e9))
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+Obtain the time components from a duration, including nanoseconds.
|
|
|
+*/
|
|
|
+precise_clock_from_duration :: proc "contextless" (d: Duration) -> (hour, min, sec, nanos: int) {
|
|
|
+ return precise_clock_from_time({_nsec=i64(d)})
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
Obtain the time components from a stopwatch's total.
|
|
|
*/
|