소스 검색

Add time.precise_clock_from_time + time.precise_clock_from_duration

Jeroen van Rijn 1 년 전
부모
커밋
c9ca192f33
1개의 변경된 파일34개의 추가작업 그리고 1개의 파일을 삭제
  1. 34 1
      core/time/time.odin

+ 34 - 1
core/time/time.odin

@@ -348,7 +348,33 @@ clock :: proc { clock_from_time, clock_from_duration, clock_from_stopwatch }
 Obtain the time components from a time.
 Obtain the time components from a time.
 */
 */
 clock_from_time :: proc "contextless" (t: Time) -> (hour, min, sec: int) {
 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))
 	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.
 Obtain the time components from a stopwatch's total.
 */
 */