当前位置: 首页 > 科技观察

为什么围棋很特别?不需要yyyy-mm-dd,而是2006-01-0215-04-05……

时间:2023-03-12 09:48:50 科技观察

大家好,我是炸鱼。前段时间写了一篇《??Go1.20 中两个关于 Time 的更新,终于不用背 2006-01-02 15:04:05 了!????》,其中提到围棋的参考时间格式是:2006-01-0215:04:05,并解释了这样设计的原因。很多同学都疑惑了。如下图:我什至在订外卖的时候看了看某团个人信息页的生日栏,是这样显示的:熟悉的yyyy-mm-dd。我什至怀疑这是不是彩蛋,大概只有程序员才懂吧?ISO8601规范特别提到了ISO8601,它是国际标准化组织提供的时间表示的规范,其中我们最熟悉的就是日期表示法。具体介绍摘自网络,如下:YYYY-MM-DDThh:mm:ss[.mmm]TZD2022-11-18T10:05:45+08:00YYYY:四位年份,不完整。MM:月份,两位数,不完整。DD:两位数的日(月中的某天),01~31。T:表示时间元素的起始字符。hh:两位数小时,00~23。mm:两位数分钟,00~59。ss:两位数秒,00~59。mmm:三位数毫秒,000~999。TZD:时区标志符:Z或+hh:mm或-hh:mm,+或-表示时区与UTC时区的距离。为什么这么特别?我们之前的文章都是讲2006-01-0215:04:05这个时间点的意义和含义:Jan215:04:052006MST123456-7这个有很大的疑问,whyGo不符合ISO8601规范,非要用这个?这会是一种新的创新吗……在深入挖掘之后,我发现它背后有标准化的理由。实际上,@RobPike在2014年的《What is the reason behind time.Parse using a reference time?[1]》上解释了为什么选择这个时间点。“这个选择是由我的Unix机器上date命令的输出决定的。我应该意识到格式因地区而异。错了。但我仍然可以说它很容易记住并且有据可查。”这就是为什么。为什么这么不舒服?起初你可能认为只有我们是扭曲的?但事实上,还不止于此。来自世界各地的人们纷纷涌向社区报告这个问题。归根结底,世界不同地区使用的时间格式不同。根据Rob的反馈,这里的Go其实只是以某个国家为时间中心的“随机”格式,对应“1234567”。例如:“Jan23:04pm06-0700”。含义:Jan:第一个月2:第二天3:下午3:004:第4分钟5:第5秒6:本世纪第6年7:比格林威治标准时间晚7小时。看起来很有规律,但是……总结一下Go中这种时间规范的选择还是比较特别的。很多同学希望他“归善”,用yyyy-mm-dd代替2006-01-0215:04:05。这显然是不现实的。首先Go1兼容性不行,其次一山难容二虎,估计没办法加了。这件事已成定局。Go1.20新增的3个常量建议记住,以后不用再去记和查了。如下:DateTime="2006-01-0215:04:05"DateOnly="2006-01-02"TimeOnly="15:04:05"这样比较现实。这种设计,我认为是技术债。将继续陪伴Go1一生,你我都在游戏中。Go2有游戏修正吗?还没有看到。