etime extend golang's time package, to provide more and better features.
Moved to https://github.com/go-eden/common
go get github.com/go-eden/etimeThis section shows all features, and their usage.
This feature works like Java's System.currentTimeMillis(), it will return int64 value directly:
CurrentSecond: obtain current second, use syscall for better performanceCurrentMicrosecond: obtain current microsecond, use syscall for better performanceCurrentMillisecond: obtain current millisecond, use syscall for better performance
For better performance, Current* didn't use time.Now(), because it's a bit slow.
package main
import (
"github.com/go-eden/etime"
"time"
)
func main() {
println(etime.NowSecond())
println(etime.NowMillisecond())
println(etime.NowMicrosecond())
println(etime.CurrentSecond())
println(etime.CurrentMillisecond())
println(etime.CurrentMicrosecond())
println(time.Now().Unix())
println(time.Now().UnixNano() / 1e6)
println(time.Now().UnixNano() / 1e3)
}In my benchmark, the performance of etime.CurrentSecond was about 40 ns/op, the performance of time.Now() was about 68 ns/op:
BenchmarkCurrentSecond-12 30000000 40.8 ns/op 0 B/op 0 allocs/op
BenchmarkCurrentMillisecond-12 50000000 39.7 ns/op 0 B/op 0 allocs/op
BenchmarkCurrentMicrosecond-12 30000000 39.7 ns/op 0 B/op 0 allocs/op
BenchmarkNowSecond-12 20000000 67.5 ns/op 0 B/op 0 allocs/op
BenchmarkNowMillisecond-12 20000000 68.1 ns/op 0 B/op 0 allocs/op
BenchmarkNowMicrosecond-12 20000000 67.8 ns/op 0 B/op 0 allocs/op
Under the same hardware environment, Java's System.currentTimeMillis() was like this:
Benchmark Mode Cnt Score Error Units
TimestampBenchmark.now avgt 9 25.697 ± 0.139 ns/op
Some library may be sensitive to this 28ns optimization, like slf4go.
By the way, System.currentTimeMillis()'s implementation was similar with etime.CurrentSecond:
jlong os::javaTimeMillis() {
timeval time;
int status = gettimeofday(&time, NULL);
assert(status != -1, "bsd error");
return jlong(time.tv_sec) * 1000 + jlong(time.tv_usec / 1000);
}So, there should have room for improvement.
MIT