最佳方式存储不同时区的日期/时间

时间:2008-11-10 14:48:42

标签: mysql

以统一的方式存储日期/时间的时区信息的最佳方式是什么,以便人们可以在当地时间从世界任何地方输入时间?然后,其他用户可以在自己的本地时间和网页上的原始本地时间查看时间。

5 个答案:

答案 0 :(得分:8)

将时间数据存储为GMT。使用当地时间显示它。这需要与GMT的简单偏移。现在,如果政治家们将单独留出Day节约时间的开始和结束日期......

答案 1 :(得分:8)

我同意Staale,但补充说,时间应该存储在Zulu时间(通常称为UTC),以便更容易地转换到其他时区。不要依赖于在服务器使用的时区中存储数据。

答案 2 :(得分:6)

我建议在UTC时区插入日期。这将为您节省很多麻烦(夏令时问题等......)

"INSERT INTO abc_table (registrationtime) VALUES (UTC_TIMESTAMP())"

当我查询我的数据时,我使用以下PHP脚本

<?  while($row = mysql_fetch_array($registration)){ 

  $dt_obj = new DateTime($row['message_sent_timestamp']." UTC");
  $dt_obj->setTimezone(new DateTimeZone('Europe/Istanbul'));
  echo $formatted_date_long=date_format($dt_obj, 'Y-m-d H:i:s'); } ?>

您可以将datetimezone值替换为此处可用的php timezones之一:

答案 3 :(得分:1)

我的观点一直是存储精确的数字时间戳(自格林威治标准时间1970年1月1日午夜起的秒或毫秒),因为这是一种可以在任何时区轻松转换为实际日期和时间的格式。

这样做的缺点是数据不能通过普通的SQL工具立即查看。 mysql cli客户端确实有这方面的方法(FROM_UNIXTIMESTAMP)。

答案 4 :(得分:1)

始终按UTC / GMT格式存储。检查mysql文档以查看哪种列类型最适合您要支持的日期和/或精度范围。

在输入时,转换为UTC并将客户端时区偏移存储在第二列中。然后,您可以轻松转换为您想要显示的任何时区,或使用提交的偏移量重新创建原始时间戳。