golang 时间戳比较大小,怎么实现

一个是golang生成的当前时间戳,但是返回的是int64位的

time.Now().Unix()

一个是从数据库中取出的的时间戳

1470219268

我要做时间比较[if time.Now().Unix() > 1470219268]。。。

但是一直报错
invalid operation: now - node.AlarmMax_SignTime (mismatched types int64 and int)

我在网上找了许久,都没有一个很好的办法,比如讲数据库中的时间戳转化为时间再对比,也不行。。。

求大神指教。。。。。。。

阅读 17.5k
5 个回答

在1.7.1下测试是可以比较的

func main() {
    if time.Now().Unix() > 1470219268 {
        fmt.Println("aaa")
    }
}

没有问题。

而且从报错信息来看,也只是int64和int不能直接比较,做一下类型转换就行了。

从数据库解析出来是定义的struct么?要是struct就把类型换成int64 ,不是就 time.Now().Unix()>int64(1470219268)

另外 要是直接是time.Now().Unix()>int64(1470219268) go是不会报错的
你可能是定义了一个变量比如
a:=1470219268
time.Now().Unix()>a 这样子会报错 a默认为int
要是这样子
var a int64
a=1470219268
time.Now().Unix()>a 这样子也是没问题的。

等号两边必须都是int64才可以比较

新手上路,请多包涵

类型转换,go中的比较必须是同类型之间的 就像整形 也分 int64 , int , int32 , 必须显示转换这些才能进行比较

做一个强制转换就行了.

c := time.Now().Unix()
var a int = 1470219268
if int64(a) > c {
    fmt.Println(1)
} else {
    fmt.Println(2)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题