时区缩写的问题:中国标准时间和美国中部标准时间都是 CST?

174 天前
 villivateur

刚刚给服务器配时区突然意识到,中国标准时间( China Standard Time ),和美国中部标准时间( Central Standard Time )都是 CST ,这难道不会有歧义吗?

4952 次点击
所在节点    程序员
58 条回复
cocogovern
174 天前
一般会有时区吧
ltyj2003
174 天前
UTC 用得比较多吧,中国 UTC+8
CodeCodeStudy
174 天前
用 Aisa/Shanghai 啊,或者用 PRC
arnoldxiao
174 天前
@ltyj2003 这个是最好的
mschultz
174 天前
Wikipedia:

时区通常都用字母缩写形式来表示,例如“EST 、WST 、CST”等。但是它们并不是 ISO 8601 标准的一部分,不应单独用它们作为时区的标识。一些缩写可能意义模糊,例如“BST”应当是英国夏令时,但在 1968 年到 1971 年间被重命名为“英国标准时”,这只是因为立法者不愿称其为中欧时间。在该法案中还确认英国的标准时间仍然为格林威治标准时。

Ref: https://zh.wikipedia.org/wiki/时区
chendy
174 天前
代码里我选择 UTC+8
每次都想不起来 beijing 到底需不需要大写有没有下划线(刚看了一眼 HongKong 有下划线)
wu67
174 天前
@chendy 现在 hongkong 我也不敢用了, 因为每次都会想到在后面加上 doll
codehz
174 天前
对,而且最近刚好因为这事,配合 chrome 的一个 bug 出过问题
https://bugs.chromium.org/p/chromium/issues/detail?id=1473422
chrome 在某次更改中打破了原有识别时区的逻辑,导致 fallback 到通过类似 cst 这样的三字母去解析时区,然后因为冲突和一些映射方面的问题,导致时区错误,或者获取到 undefined 的问题
tool2d
174 天前
我看了一下自己以前写的代码,确实很离谱。

if (timeadj == "cst") localadj = -( 6 *3600 ); // Central Standard Time (North America)
if (timeadj == "cst") localadj = ( 9 *3600 +60*30 ); // Central Standard Time (Australia)
if (timeadj == "cst") localadj = (10 *3600 +60*30 ); // Central Summer Time (Australia)
if (timeadj == "cst") localadj = -( 5 *3600 ); // Cuba Standard Time
if (timeadj == "cst") localadj = ( 8 *3600 ); // China Standard Time
vuevue
174 天前
主要看偏移量,看缩写有可能是算出来的不准
rickiey
174 天前
CST 全球至少有 4 个国家地区用的缩写,在哪看到过,忘了,具体还得 +08:00
hahastudio
174 天前
真正弄时区我觉得应该用 Asia/Shanghai 这类的地区,操作系统提供选择的也是地区
因为有的地区有夏令时,比如现在我们早晨 10 点的时候,加州那边是前一天晚上 6 点;然后上个月的时候,我们的早晨 10 点是加州那边的晚上 7 点
然后不同年份,同一地区的时区可能不同,我们之前也试行过几年夏令时
hahastudio
174 天前
@rickiey
北京时间,China Standard Time
澳洲中部时间,Central Standard Time (Australia)
北美中部时区,Central Standard Time (North America)
古巴标准时间,Cuba Standard Time ,参见北美东部时区
7inFen
174 天前
我感觉“2023-03-07T10:30:00Z”这种格式的时间最好用,客户端拿到后会解释为本地时区的时间
mingwiki
174 天前
我一直用的 Asia/Singapore (CST, +0800)
codehz
174 天前
@vuevue 偏移量也不一定准,你考虑下夏时令,还有其实各国也可能随时更新它的时区,因此需要一个动态的数据
gps949
174 天前
@wu67 你是把你的输入法训练出来了吗?😂
nzynzynzy
174 天前
还是得看城市,因为 UTC +几并不能代表夏令时/冬令时
vishun
174 天前
中情局我特么原先一直以为是中国的。。。
sherlockwoo
174 天前
Javaer 可太熟了:
Java 的 CST 代表美国中部标准时间( Central Standard Time ),MySQL 的 CST 代表中国标准时间( China Standard Time ),两者相差 13~14 小时

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

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

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

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

© 2021 V2EX