web 开发涉及到时间的是一律使用 utc 时间吗?

2016-07-21 15:26:34 +08:00
 myyou
8372 次点击
所在节点    Python
61 条回复
julyclyde
2016-07-22 11:58:42 +08:00
@loading 千年虫是年份只保留两位,不支持 21 世纪;而不是 2000 闰年的问题
julyclyde
2016-07-22 11:59:03 +08:00
@loading GMT 没有全球广泛的法律效力,虽然和 UTC 数值基本一致
julyclyde
2016-07-22 12:00:36 +08:00
另外 China standard time 据说不支持闰秒,在闰秒时会两次出现 59 秒,有可能发生逆序事故; UTC 是支持的
loading
2016-07-22 12:04:13 +08:00
@julyclyde 嗯,你掌握得很全面。
expkzb
2016-07-22 12:34:56 +08:00
@xuboying 请看你楼下的回复
xuboying
2016-07-22 13:12:39 +08:00
@expkzb 是啊,下面也是表示要用 epoch 。时间戳表示了一个确定的时刻, human 时间只是加上时区 /dst 的时间戳不同表现显示而已
silver107
2016-07-22 13:29:48 +08:00
存时间戳,是不是没有时区问题
rubyvector
2016-07-22 14:00:25 +08:00
最近也遇到此问题.如果用户是跨时区的,可得注意了.不然大乱
Comdex
2016-07-22 14:28:16 +08:00
@rubyvector
@julyclyde
@bingwenshi
@lizon
@skydiver 请教一下各位,在数据库中保存时间是使用 datetime 或字符串还是使用 int64 类型保存时间截好?现在比较普遍的做法是怎样的?
quix
2016-07-22 14:49:49 +08:00
@myyou 生日的话... 并不是时间 只是个几月几日的信息, 连年份都没有
如果说的是出生日期( dob) 的话则是一个不含时区的日期 因此也不应该是作为时间戳保存而应该作为字符串保存 ( 如果需要查询时进行比较可以存成统一时区的日期, 最好是 utc )
Mirana
2016-07-22 14:51:29 +08:00
存时间戳也有时间问题啊 主要是是时区的问题
jybox
2016-07-22 14:52:05 +08:00
首先内部表示和物理层面肯定是存 UTC ,几乎所有数据库都是这样的(他们接受任何时区的时间,但会存成 UTC )。但如果你存 UTC 的话,一定要把时区也一起存起来(可能要放到单独的字段,要看数据库支持不支持)。

因为时区是一个有关时间的重要元信息(和时区相关联的不仅仅是偏移量,还包括夏令时和冬令时之类的东西),当然不应该丢掉它。否则例如一个人在中国发了一个帖子,又去美国发了一个帖子,那么如果服务器不存时区,只依赖客户端时区的话,就可能会发现两个帖子是同一时间,甚至后一个帖子的时间比前一个更早。

至于客户端和服务器端之间的 API ,我认为双方都要有接受任何时区的时间的能力,现在绝大部分的语言都提供了这样的能力。发送的时候,客户端按照本地时区发送(以便把时区这个信息传递给服务器);服务器在发送时,则以数据库中记录的,客户端的时区来发送。
lizon
2016-07-22 15:33:13 +08:00
cxbig
2016-07-22 15:40:43 +08:00
我司服务器时间和存数据库的各种时间一律用 UTC ,前端根据实际业务时区做转换输出输入。
mgcnrx11
2016-07-22 17:17:08 +08:00
@julyclyde 请教一下,看了一下 wiki 上 UTC 的介绍, UTC 是会在适当的时候增加闰秒来保持与 GMT 不差超过 1 秒的。那么,对于要做日期转换的工具库(类)来说,岂不是需要针对未来未知的某个闰秒做更新,才能正确转换时间?否则闰秒会造成转换的时候多了一秒这种情况吧?
dorentus
2016-07-22 18:46:53 +08:00
你的操作系统底层都是用 unix epoch 或者类似 unix epoch 的方式表达时间的。
owt5008137
2016-07-22 19:08:25 +08:00
@myyou 现在 unix 时间戳基本上都用 int64 保存了,除非你强制往 int32 转。所以反正你活着的时候肯定够用了
janxin
2016-07-22 20:01:23 +08:00
UNIX 时间戳用 int64 ,够用了啊
julyclyde
2016-07-22 22:56:23 +08:00
@mgcnrx11 首先你要知道 UTC 是根本,闰秒是在 UTC 里做的;到各个行政时区,是 59 秒之后 60 秒,还是 59 秒之后又一个 59 秒,或者做夏令时处理,那是各国政府自己的事了。保存、传输都用 UTC ,直到最后展现的时候才用行政时区,可以做到损失的最小化
julyclyde
2016-07-22 23:05:44 +08:00
https://access.redhat.com/articles/1187353
http://www.cnbeta.com/articles/437413.htm
https://mm.icann.org/pipermail/tz-announce/2015-August/000033.html
Changes affecting future time stamps

North Korea switches to +0830 on 2015-08-15. (Thanks to Steffen Thorsen.)
The abbreviation remains "KST".

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/293957

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX