2014-12-04 232 views
1

当前日期时间我存储在注册时,用户作为DATETIME的,如下面看到存储在数据库

+-----+--------------------+ 
| id |  Join_Date  | 
+-----+--------------------+ 
| 1 | 2014-12-5 03:21:46 | 
+-----+--------------------+ 
| 2 | 2014-12-3 03:21:46 | 
+-----+--------------------+ 

它使国家之间的差异最好的财产?

我们也许说,在中国的本地时间凌晨3点是使数据库存储日期时间为凌晨3点,而在印度当地时间凌晨5点是使数据库存储日期时间为上午05点。这个逻辑是否正确?如果是,这不是我想要的。我想要的是将日期时间存储在相同的时间戳中。我怎样才能做到这一点?

+0

MySQL已经没有时区的概念,也不应该。您需要存储特定日期/时间的时区。无论您选择哪个时区,都不会得到不同的时间。 – 2014-12-04 20:20:35

+0

您的应用程序逻辑依赖于此。如果这个问题被标记为PHP,我会推荐使用'DateTime'对象[可以为您处理时区](http://php.net/manual/en/datetime.settimezone.php),并提出一个通用区域,或者使用使用UTC的UNIX时间戳。 – sjagr 2014-12-04 20:22:32

+0

@sjagr在服务器端使用PHP Im = D – user3651999 2014-12-04 20:24:25

回答

0

很少需要使用服务器以外的语言环境来存储日期时间信息。大多数情况下,日期时间事件是由服务器计算的,所以除非您存储用户提供的值(例如出生日期),否则应该将其存储为UTC。

而且,即使与大多数用户提供的日期时间值(安排约会,例如)你必须将其存储在数据库之前正常化该值UTC。这样的日期将保持一致,即使用户时区的变化(在旅途中,例如,或者当夏令时是有效的。)

0

存储它作为DATETIME数据类型是要使用的最佳数据类型。但是您应该将日期存储为UTC日期,然后将其转换为您需要的时区。

这样,时间在不同时区之间是一致的。否则,您可以将它们存储在数据库中的全部时间(包括时区)中。例如,在MS Sql Server中,您可以使用datetimeoffset

+0

如果我们真的想讨论什么是最好的给定的参数 - 唯一的理智的选择是'timestamp'数据类型,而不是'datetime'。 – 2014-12-04 22:01:46