golang time包t.After的坑

悟道人 · · 143 次点击 · · 开始浏览    

代码如下

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    const FORMAT = "2006-01-02 15:04:05"
    var a = new(sync.Map)
    b := time.Now()
    fmt.Println(b.Location())
    a.Store("a", b)
    //c, _ := a.Load("a")
    fmt.Println(b.Format(FORMAT))
    time.Sleep(time.Second * 10)
    after := time.Hour * 5
    //t, ok := c.(time.Time); ok &&
    t := b
    if t.Add(after).After(time.Now()) {
        fmt.Println(t.Unix(), "\n", time.Now().Unix())
        fmt.Println(t.Add(after).Format(FORMAT), " 大于 ", time.Now().Format(FORMAT))
    } else {
        fmt.Println(t.Add(after).Format(FORMAT), " 小于 ", time.Now().Format(FORMAT))
    }
}

执行到time.Sleep(time.Second * 10)时如果修改当前时间为1天后,下面的After会判断错误,下面是输出结果

Local
2019-07-11 08:45:23
1562805923 
 1562856331
2019-07-11 13:45:23  大于  2019-07-11 22:45:31

如果t加上Local就没有问题,t.After函数的判断方式有问题

本文来自:简书

感谢作者:悟道人

查看原文:golang time包t.After的坑

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

143 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传