aboutsummaryrefslogtreecommitdiff
path: root/core/time
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-08-20 18:50:05 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2024-08-20 18:50:05 +0200
commitdaa0779c019738ffe775e80e8c1a4f76cd4b1e0f (patch)
tree0c03388fd1e6cfd73147650ed0a805bef1433f44 /core/time
parentd7e81e86f56eecbc66cb84749a52458881d2a6fd (diff)
Rewrite compound_to_time without using i128.
Diffstat (limited to 'core/time')
-rw-r--r--core/time/time.odin15
1 files changed, 9 insertions, 6 deletions
diff --git a/core/time/time.odin b/core/time/time.odin
index 4612c28e6..5903b212d 100644
--- a/core/time/time.odin
+++ b/core/time/time.odin
@@ -932,18 +932,21 @@ as the second return value. See `Time` for the representable range.
compound_to_time :: proc "contextless" (datetime: dt.DateTime) -> (t: Time, ok: bool) {
unix_epoch := dt.DateTime{{1970, 1, 1}, {0, 0, 0, 0}}
delta, err := dt.sub(datetime, unix_epoch)
- ok = err == .None
-
- seconds := delta.days * 86_400 + delta.seconds
- nanoseconds := i128(seconds) * 1e9 + i128(delta.nanos)
+ if err != .None {
+ return
+ }
+ seconds := delta.days * 86_400 + delta.seconds
// Can this moment be represented in i64 worth of nanoseconds?
// min(Time): 1677-09-21 00:12:44.145224192 +0000 UTC
// max(Time): 2262-04-11 23:47:16.854775807 +0000 UTC
- if nanoseconds < i128(min(i64)) || nanoseconds > i128(max(i64)) {
+ if seconds < -9223372036 || (seconds == -9223372036 && delta.nanos < -854775808) {
+ return {}, false
+ }
+ if seconds > 9223372036 || (seconds == 9223372036 && delta.nanos > 854775807) {
return {}, false
}
- return Time{_nsec=i64(nanoseconds)}, true
+ return Time{_nsec=seconds * 1e9 + delta.nanos}, true
}
/*