V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
AmrtaShiva
V2EX  ›  Go 编程语言

golang 的 time.Time 的最大有效时间到 2157 年吗?

  •  
  •   AmrtaShiva · 2020-03-20 08:29:58 +08:00 · 4741 次点击
    这是一个创建于 1745 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 如题
    • 看了一下时间的源码 time.go
    • 在 152 行 maxWall = wallToInternal + (1<<33 - 1) // year 2157 这个注释没看懂什么意思
    • 是不是最大有效时间只能到 2157 年呢?超过了就比较不了了?
    • PS (英文不好所以大部分英文注释没看懂) 请看过源码的有时间说下可以吗 谢谢
    第 1 条附言  ·  2020-03-20 11:30:55 +08:00
    感谢各位回复
    现在看来得自己写一个比较的方法了
    第 2 条附言  ·  2020-03-21 08:42:10 +08:00
    我的计算方法少加了一个朔 所以对比不到最后一个中气和朔的数据了 和 go 的时间包没多大关系 再次感谢回复的各位
    16 条回复    2020-04-06 13:42:36 +08:00
    mazyi
        1
    mazyi  
       2020-03-20 09:13:43 +08:00
    英语不好可以翻译
    thet
        2
    thet  
       2020-03-20 09:16:16 +08:00   ❤️ 1
    https://github.com/golang/proposal/blob/master/design/12914-monotonic.md
    https://zhuanlan.zhihu.com/p/93299132
    可以参考一下这个,wall time 存储的是壁钟的时间(该时钟可能会更改以进行时钟同步)
    loading
        3
    loading  
       2020-03-20 09:18:47 +08:00 via Android
    没事,到时再加一位就行了。
    64 位只有这么长。

    unix 时间戳也加过位。
    AmrtaShiva
        4
    AmrtaShiva  
    OP
       2020-03-20 10:04:47 +08:00
    @loading 怎么加?
    loading
        5
    loading  
       2020-03-20 10:05:45 +08:00 via Android
    @AmrtaShiva 这不是你和我关心的。还有一百多年。
    loading
        6
    loading  
       2020-03-20 10:06:32 +08:00 via Android
    你确有需要就自己写个包,别直接改基础库。
    whitehack
        7
    whitehack  
       2020-03-20 10:55:02 +08:00
    1 百多年以后的事还要管?
    spadger
        8
    spadger  
       2020-03-20 10:57:15 +08:00
    我自己的版本号只能到 2127 年,我觉得都够用了,感觉自己活不了那么久。
    2kCS5c0b0ITXE5k2
        9
    2kCS5c0b0ITXE5k2  
       2020-03-20 11:09:38 +08:00
    2127 年 是不是还会是 x64? 或许计算机都不存在了... 还担心这个
    whywhywhy
        10
    whywhywhy  
       2020-03-20 11:24:32 +08:00
    @emeab 哈哈哈,以前一个计算机就是一栋楼,现在一个计算机直接揣兜里了
    AmrtaShiva
        11
    AmrtaShiva  
    OP
       2020-03-20 11:28:33 +08:00
    @loading 我在写万年历 到今后三千年的时间 看了一下 go 的 time.Time 比较 不能做到小于等于的情况下比较两个时间 这里就得自己搞了
    @whitehack
    @spadger
    看了一下时间比较函数 go 的时间比较就只有大于或者小于 没有等于的情况 时间上刚才看了一下 可以比较出来
    ```
    package main

    import (
    "fmt"
    "time"
    )

    func difft() (b bool) { //如果日期相等就返回 false

    t1 := time.Date(2166, 12, 22, 12, 0, 0, 0, time.UTC)
    t2 := time.Date(2166, 12, 22, 12, 0, 0, 0, time.UTC)
    b = t1.Before(t2)
    fmt.Printf("b:%t\n", b)
    return
    }

    func main() {
    fmt.Println("vim-go")
    difft()
    }

    ```
    QUIOA
        12
    QUIOA  
       2020-03-20 12:36:56 +08:00 via Android
    想到
    loading
        13
    loading  
       2020-03-20 12:44:28 +08:00 via Android
    你很难估计后面的事,你知道闰秒吗?还有时间调整。

    例如
    1927 年 12-31 23:54:07
    1927 年 12-31 23:54:08
    相减,结果应该是
    353
    si
        14
    si  
       2020-03-20 16:00:00 +08:00
    等 intel/amd x128 的计算机出现就支持更大的时间了[doge]
    AmrtaShiva
        15
    AmrtaShiva  
    OP
       2020-03-20 19:34:31 +08:00 via iPhone
    @loading 知道润秒 这东西早就有人建议取消了 我手里的数据 不打算计算润秒 因为影响可以忽略 我大概看了一下 计算出来的时间和寿星最新版本就是差润秒的时间
    reus
        16
    reus  
       2020-04-06 13:42:36 +08:00
    @AmrtaShiva time.Time 有 Equal 方法!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1943 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:33 · PVG 08:33 · LAX 16:33 · JFK 19:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.