我正在构建一个支持时区的Web应用程序,我正在寻找最佳实践。
例如,我有用户A和用户B,他们设置了时区。用户A输入时间。 (在他的时区。)现在如何将其存储在数据库中。
用例
我可以看到两种方式的优点。我并不是特别寻找这个问题的答案,而是特别关注构建时区感知网络应用程序的信息。
我正在使用Python,但也在寻找语言不可知的提示。
答案 0 :(得分:4)
从语义上讲,您操作的几乎所有日期时间都是绝对时间(例如:计费,创作和修改,最后一次,api限制,SO赏金......)。它们应该以UTC格式存储,以免对它们产生歧义。否则,当某些政府更改DST规则并更新您的系统规则时,您存储的值将改变含义。
如果日期时间也指时间和地点(例如会议,一般日历),您可以将完整的符号日期存储在RFC 3339中,包括时区名称(与UTC不同) offset),并按需转换为UTC。
答案 1 :(得分:2)
一般来说,我认为将时间转换为通用格式(UTC)来存储它们更有意义,然后在显示它们时将它们转换为用户自己的时区。您可以根据IP地址猜测匿名用户,或者默认为可能的时区。
当然,这取决于你在做什么。对于很多事情,绝对时间很重要:例如如果有视频会议,则每个时区的人的开始时间必须相同。但是有一些情况是当地时间完成的。例如,Earth Hour是每个时区的晚上8:30到9:30。