给定今天的时间,以 golang 中的分钟数获取 UTC 时间的最佳方式
Optimal way to get time in UTC given today's time as minutes in golang
我有当天的时间(即小时 * 60 + 分钟)作为输入,需要将其转换为 time.Time
这是我尝试做同样的事情。
例子
Input: 780
Output : 2017-01-29 13:00:51.992871217 +0000 UTC
代码
func MinutesToTime(minutes int) time.Time {
t := time.Now().UTC() //may be cached
h, m, _ := t.Clock()
diff := minutes - (h*60 + m)
t = t.Add(time.Duration(diff) * time.Minute)
return t
}
疑问
time
包公开的功能是否有帮助
我优化这个
- 我应该直接使用 gettimeofday() 系统调用吗
- 尝试实施 vDSO 会不会有点矫枉过正,在 go source code
中可以找到仅针对 amd64 的 vDSO 实施
PS
59 秒错误是可以接受的,因为分钟是我的最低粒度
package main
import (
"fmt"
"time"
)
func main() {
fmt.Print(MinutesToTime(780).UTC())
}
func MinutesToTime(m int64) time.Time {
return time.Unix(time.Now().Unix()/86400*86400+m*60, 0)
}
% go run test.go
2017-01-29 13:00:00 +0000 UTC%
我有当天的时间(即小时 * 60 + 分钟)作为输入,需要将其转换为 time.Time
这是我尝试做同样的事情。
例子
Input: 780
Output : 2017-01-29 13:00:51.992871217 +0000 UTC
代码
func MinutesToTime(minutes int) time.Time {
t := time.Now().UTC() //may be cached
h, m, _ := t.Clock()
diff := minutes - (h*60 + m)
t = t.Add(time.Duration(diff) * time.Minute)
return t
}
疑问
time
包公开的功能是否有帮助 我优化这个- 我应该直接使用 gettimeofday() 系统调用吗
- 尝试实施 vDSO 会不会有点矫枉过正,在 go source code 中可以找到仅针对 amd64 的 vDSO 实施
PS 59 秒错误是可以接受的,因为分钟是我的最低粒度
package main
import (
"fmt"
"time"
)
func main() {
fmt.Print(MinutesToTime(780).UTC())
}
func MinutesToTime(m int64) time.Time {
return time.Unix(time.Now().Unix()/86400*86400+m*60, 0)
}
% go run test.go
2017-01-29 13:00:00 +0000 UTC%