我一直在尝试使用一些 go,并且在windows上发现了一些奇怪的行为。如果我通过解析特定格式的时间字符串构造一个时间对象,然后使用类似的函数time.Since(),我会得到负的持续时间。
代码示例:
package main
import (
"fmt"
"time"
"strconv"
)
func convertToTimeObject(dateStr string) time.Time {
layout := "2006-01-02T15:04:05.000Z"
t, _:= time.Parse(layout, dateStr)
return t
}
func main() {
timeOlder := convertToTimeObject(time.Now().Add(-30*time.Second).Format("2006-01-02T15:04:05.000Z"))
duration := time.Since(timeOlder)
fmt.Println("Duration in seconds: " + strconv.Itoa(int(duration.Seconds())))
}
Run Code Online (Sandbox Code Playgroud)
如果你在 Linux 或 Go Playground链接上运行它,你会得到Duration in seconds: 30预期的结果。
但是,在 Windows 上,使用 Go 1.10.3 运行同一段代码会得到Duration in seconds: -19769.
我已经为此纠结了好几个小时。对我可能缺少的东西有什么帮助吗?从那以后我唯一的线索是当 go 的time包去计算两个时间对象(time.Now()和我解析的时间对象)的秒数时,其中一个有属性hasMonotonic,一个没有,这导致 go 计算大不相同两秒钟。 …