2020-06-07 16:19:09 +03:00
|
|
|
module time
|
|
|
|
|
2021-01-05 13:43:34 +03:00
|
|
|
// operator `==` returns true if provided time is equal to time
|
2020-06-10 12:14:55 +03:00
|
|
|
[inline]
|
2021-01-05 13:43:34 +03:00
|
|
|
pub fn (t1 Time) == (t2 Time) bool {
|
2023-08-05 23:41:23 +03:00
|
|
|
return t1.unix == t2.unix && t1.nanosecond == t2.nanosecond
|
2020-06-07 16:19:09 +03:00
|
|
|
}
|
|
|
|
|
2021-01-05 13:43:34 +03:00
|
|
|
// operator `<` returns true if provided time is less than time
|
2020-12-16 14:10:02 +03:00
|
|
|
[inline]
|
2021-01-05 13:43:34 +03:00
|
|
|
pub fn (t1 Time) < (t2 Time) bool {
|
2023-08-05 23:41:23 +03:00
|
|
|
return t1.unix < t2.unix || (t1.unix == t2.unix && t1.nanosecond < t2.nanosecond)
|
2020-06-07 16:19:09 +03:00
|
|
|
}
|
|
|
|
|
2021-01-13 17:30:54 +03:00
|
|
|
// Time subtract using operator overloading.
|
2020-12-21 11:28:00 +03:00
|
|
|
[inline]
|
2020-12-21 22:20:00 +03:00
|
|
|
pub fn (lhs Time) - (rhs Time) Duration {
|
2023-08-05 23:41:23 +03:00
|
|
|
// lhs.unix * 1_000_000_000 + i64(lhs.nanosecond) will overflow i64, for years > 3000 .
|
|
|
|
// Doing the diff first, and *then* multiplying by `second`, is less likely to overflow,
|
|
|
|
// since lhs and rhs will be likely close to each other.
|
|
|
|
unixs := i64(lhs.unix - rhs.unix) * second
|
|
|
|
nanos := lhs.nanosecond - rhs.nanosecond
|
|
|
|
return unixs + nanos
|
2020-12-21 11:28:00 +03:00
|
|
|
}
|