想问下 V 友们关于海外业务,服务器时区一般是跟随机器时区,还是程序内配置?
另外 PHP 提供了好多地区的时区配置,不知道有什么区别
例如Asia/Shanghai
和Etc/GMT-8
好像都表示东八区,但又找不到我们平时说的+08:00
这样的表示
1
chotow 2020-08-10 17:12:02 +08:00 1
- Asia/Shanghai 和 Etc/GMT-8 属于 TZ 数据库( TZ database )的写法
- +08:00 是 ISO 8601 中时区的写法 前者常在设置的时候使用,后者常在展示的时候使用。 (个人观点,欢迎指教) php 中 TZ 的配置项: https://www.php.net/manual/en/timezones.php 对于中国大陆来说,标准写法是 Asia/Shanghai ;而 PRC 、Etc/GMT-8 是向后兼容的写法,php 官方并不推荐。 |
2
lovecy OP @chotow 主要是可能一个服务器面向多个地区提供服务,这种情况是不是按服务器所在地的时区来就好了,比如泰国和越南是同个时区,服务器在越南就用`Asia/Ho_Chi_Minh`,在泰国就用`Asia/Bangkok`。
|
3
lovecy OP 使用指定地区的时区,是不是可以自动适配当地的时间政策,比如夏令时之类的骚操作
|
4
sujin190 2020-08-10 18:14:12 +08:00
@lovecy #2 一般来说,正确做法应该是服务器保存就带了时区,返回前端时候带上时区格式化,现实到页面上的时候在 format 到本地时区,那么这时候服务器保存的啥时区似乎不重要,重要的是显示的时候要格式化成本地时区,mysql 这种不支持时区的可以选择一个固定时区在输出的时候加进去就行了
|
5
sujin190 2020-08-10 18:16:01 +08:00
@chotow #1 php 的 Asia/Shanghai 和 Etc/GMT-8 完全是一样的,但是把 python 的 datetime 就差了几分钟,然后被这个问题坑到死啊,后来就只用 Etc/GMT-8 了
|
6
lovecy OP @sujin190 因为旧项目在源码配置写死了 Asia/Shanghai,这个已经改不了了,所以只能手动配置服务端时区了。
话说我很好奇,为啥只有 Asia/Shanghai,没有 Asia/Beijing,我们平时不都说北京时间么。另外 python 的这两个时区时间不一致,是根据的标准不同导致的么。。 |
7
sujin190 2020-08-12 18:32:05 +08:00
@lovecy 估计不是,北京时间按定义应该是东八区时间,但是吧每个时区似乎是又可以细分的,上海其实不完全在东八区起始位置,所以应该 python 是用了细分后的时区,但是吧数学上也许看起来更严谨现实来说就很坑人了
|