保存的时间是不是统一用UTC时间比较好?还是每个地区用各自的当地时间来保存?时间不仅仅是用来显示,还涉及一些逻辑运算,比如按日期取出某一天的所有数据进行计算,但是需要根据不同时区来取某一天,有没有什么方法不造成混乱?
1
lichao 2015-07-27 08:33:09 +08:00
数据库中保存 UTC,每个用户账号中保存一个“所在时区”字段,显示或逻辑运算的时候转换一下
|
3
ShinichiYao OP @lichao 谢谢,那如果我要按+0800的时区取出2015-07-07那一天的数据要怎么做呢?
|
4
ShinichiYao OP 有些国家比如意大利还有夏令时,一想到怎么取时间就头疼啊
|
5
lichao 2015-07-27 08:55:25 +08:00
@ShinichiYao 把 2015-07-07 转换为 UTC,然后数据库中 where 呗
|
6
dndx 2015-07-27 09:05:11 +08:00 via iPhone
@ShinichiYao UTC 就没夏令时。
|
7
ShinichiYao OP @lichao 不好意思,还是不太能理解,数据库保存的是UTC,那么实际我需要取出的是 2015-07-07 08:00:00 之后的数据和 2015-07-08 08:00:00 之前的数据,并且是按照本地时间显示出来也就是2015-07-07 00:00:00 到 2015-07-07 23:59:59,MySQL有这样按时区转换后时间条件的判断语句吗?
|
8
msg7086 2015-07-27 09:09:42 +08:00
为啥要时区转换后?
你从用户这里读到了07-07 8:00+8,代码里转成07-07 0:00Z扔进数据库里查不就行了? |
9
ShinichiYao OP @msg7086 我从用户这里读到的是07-07,我要根据用户的时区去数据库找到对应时区07-07 0点到24点的所有数据,还要判断对方当前这个日期是否是夏令时再进行+1小时判断
|
10
zhicheng 2015-07-27 09:27:24 +08:00 via Android
模版里转换一下就行了。这个肯定是存UTC的。
|
11
siteshen 2015-07-27 09:28:25 +08:00 via iPhone
r t
|
12
yutian2211 2015-07-27 09:39:22 +08:00
实际时间是UTC,展示时间是+tz的,
如果要查在某一个时区的结果,把这个时区的时间换算成UTC,到数据库中Where就好了 |
13
ShinichiYao OP 暂时还是用全局UTC,查询CONVERT_TZ( '2015-07-07 12:00', '+00:00', '+08:00' )来做吧
至于夏令时,就用PHP判定一下 $timezone = date('e'); //获取当前使用的时区 date_default_timezone_set('Europe/Rome'); //强制设置时区 $dst = date('I'); //判断是否夏令时 date_default_timezone_set($timezone); //还原时区 |
14
Khlieb 2015-07-27 10:20:09 +08:00 via Android
@ShinichiYao 设计一种规则,按具体时区转换夏令时
|
15
finab 2015-07-27 10:23:00 +08:00
如果每个地区的数据相关,例如 获取两个时区某一天的数据 就存UTC和时区吧
如果两个时区数据比较独立,不会存在 这个时区和那个时区的数据同时取,就存每个时区的时间呗。。 |
16
lazing 2015-07-27 10:44:56 +08:00
要看数据库和应用框架。比如 postgres 就有 datetime_with_timezone 的类型
|
17
zodiac1111 2015-07-27 11:30:03 +08:00
统一utc.显示是根据local确定.
比如同一用户出差到不同时区这样的情况. |
18
realpg 2015-07-31 10:06:00 +08:00
存时间戳。
只要操作MYSQL的程序(假设你是PHP)的本机时区时间设置正确,用time()生成的时间戳直接保存就行了 使用端只要本机的时区和时间戳设置正确,直接date("Y-m-d H:i:s",$timestamp)出来的就是本地时间 |