ADDED:
* timex, for some floaty-UNIX-y things
This commit is contained in:
brent saner
2025-12-23 18:57:28 -05:00
parent 006cf39fa1
commit ef56898d6b
3 changed files with 69 additions and 0 deletions

4
timex/doc.go Normal file
View File

@@ -0,0 +1,4 @@
/*
Package timex provides some handy [time]-related functions.
*/
package timex

35
timex/funcs.go Normal file
View File

@@ -0,0 +1,35 @@
package timex
import (
`time`
)
/*
F64Seconds returns [time.Time] `t` as a 64-bit float of <seconds>.<nanoseconds>
(where <nanoseconds> is the number of nanoseconds since <seconds>,
and <seconds> is the number of seconds since the UNIX epoch).
This can be used to represent a UNIX Epoch timestamp as seconds but with nanosecond precision.
*/
func F64Seconds(t time.Time) (f64 float64) {
return F64Nanoseconds(t) / float64(time.Second)
}
/*
F64Milliseconds is like [F64Seconds] but with a millisecond integer.
*/
func F64Milliseconds(t time.Time) (f64 float64) {
return F64Nanoseconds(t) / float64(time.Millisecond)
}
/*
F64Microseconds is like [F64Seconds] but with a microsecond integer.
*/
func F64Microseconds(t time.Time) (f64 float64) {
return F64Nanoseconds(t) / float64(time.Microsecond)
}
// F64Nanoseconds returns [time.Time.UnixNano] as a float64.
func F64Nanoseconds(t time.Time) (f64 float64) {
return float64(t.UnixNano())
}

30
timex/funcs_test.go Normal file
View File

@@ -0,0 +1,30 @@
package timex
import (
"testing"
`time`
)
func TestF64(t *testing.T) {
var tmNano float64 = 1766533329999999999
var tmSeconds float64 = 1766533329.999999999
var tmMilli float64 = 1766533329999.999999
var tmMicro float64 = 1766533329999999.999
// 2025-12-23 23:42:09.999999999 +0000 UTC
var tm time.Time = time.Unix(1766533329, int64(time.Second-1))
if F64Seconds(tm) != tmSeconds {
t.Fatalf("Failed seconds: %f != %f", F64Seconds(tm), tmSeconds)
}
if F64Milliseconds(tm) != tmMilli {
t.Fatalf("Failed milliseconds: %f != %f", F64Milliseconds(tm), tmMilli)
}
if F64Microseconds(tm) != tmMicro {
t.Fatalf("Failed microseconds: %f != %f", F64Microseconds(tm), tmMicro)
}
if F64Nanoseconds(tm) != tmNano {
t.Fatalf("Failed nanoseconds: %f != %f", F64Nanoseconds(tm), tmNano)
}
}