关于软件开发中的跨地区的时区问题

2 天前
 kushu001
在最近的开发过程中,发现数据库服务器的时间是比北京时间少 8 小时的,所以存数据的时候,时间字段自动扣减了 8 小时。

因为这个现象,我突然想到跨时区的应用在处理这样的时间问题,一般都是怎么处理的,有点不太理解
目前看到的一个方案是,数据库和应用服务器都处理标准时间,不同时区的客户端自行解析时间?

但是我总感觉有点问题,特此在 v2 站点寻求一点处理方案,看看各位大佬,有没有好的解决办法😅
2279 次点击
所在节点    程序员
45 条回复
2han9wen71an
2 天前
时间戳
ashong
2 天前
存 utc
Plutooo
2 天前
你看到的方案没问题,服务端只返回时间戳给客户端,客户端根据用户时区自行解析
ivvei
2 天前
你感觉有点问题,什么问题?
lbunderway
2 天前
utc
cowcomic
2 天前
要是就是针对一个时区内的开发,那就全部统一成这个时区,比如就开发国内的东西,那就都用东八区
要是开发一个系统涉及多时区共用,那就是后台统一成标准时间 UTC ,然后前端再去自行改变,可以通过定位或者子域名或者目录层级都可以。
要是系统庞大涉及跨区域独立部署,那中央机房保持 UTC ,其他各时区独立部署的可以设置对应时区,再在数据同步时进行归一
kushu001
2 天前
@ivvei 只是感觉,说不上来,如果后续要进行数据分析,是不是会比较困难?我看数据库里存 timestamp 好像也没有时区的显示啊,是要另外做一个字段显示?
nzynzynzy
2 天前
数据处理储存一定用 UTC ,不要搞这种减八小时。很多地方都有夏令时冬令时的切换,这个时差可能随时+1 / -1
barrywey
2 天前
服务端的程序,以及数据存储,永远都使用 UTC ,已 UTC 为基准。

应用(浏览器、客户端等)请求数据的时候,根据所处的地区自己转换为本地时间。

应用和服务端之间传输数据的过程,还是已 UTC 为准。
ksedz
2 天前
时间戳或者 UTC ,需要注意的是有些 orm (不仅仅是数据库)会自动根据时区进行转换,需要处理下。
zeromake
2 天前
@barrywey 然后一往 db 里塞了发现 db 有自己的时区()
esee
2 天前
都是存储和返回时间戳给客户端自己解析的。。纯数字的时间戳才方便做各种分析
barrywey
2 天前
@zeromake 数据库也要 UTC ,或者干脆整个服务器都配置成 UTC
rocmax
2 天前
timestamp 是绝对的,日期和本地时间是相对的。如果服务器和客户端无法强制统一时区,则系统测一律使用 utc ,客户端按照本地时区转换。
浏览器提供了本地时区检测 api ,
vczyh
2 天前
数据库怎么存和服务保持一致就行,服务返回给渲染层按照 ISO8601 https://en.wikipedia.org/wiki/ISO_8601 来,这个我觉得比时间戳直观。
rocmax
2 天前
@rocmax 同时也应该提供手动切换选项。
前一阵用 nextjs 开发 app ,服务端渲染时时区更是个麻烦事,需要客户端将时区存在 cookie 里,服务端根据客户请求渲染页面。
Mithril
2 天前
存储不要用 UTC ,用 DatetimeOffset ,主要是相比 UTC ,它有个时区的偏移量。
这样你能知道你这条数据,是从哪个时区生成的。特别是你在同一个服务器中处理不同时区发过来的数据时,未来你如果想要显示这数据生成时的本地时间,那你存 offset 会省很多事。你如果只存 UTC ,等你加了这需求的时候会有大把的数据显示不正常。所以如果你做跨国的应用,不如从开始就存 offset 。
然后所有程序中处理的时候都用它来做,最终显示的时候再转换回本地时区。
zeromake
2 天前
@barrywey 然后联系运维,运维说是云的数据库,改起来太麻烦了……
dode
2 天前
所有的中国服务器,软件,环境变量等配置好东八时区
nekochyan
2 天前
我们现在是直接服务器是 0 时区,直接 UTC 存储,然后再配置一个业务要跑在哪个时区字段偏移量,所有业务算时间用统一接口会加上这个偏移量去计算,客服端同理用服务器下发的偏移量计算;这样可以跑在任意时区,避免夏令时问题

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

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

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

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

© 2021 V2EX