客户 - >服务器时差和时间存储

时间:2015-02-23 16:45:24

标签: mysql timezone client-server

我正在开发一个客户端应用程序,当用户读取内容时,我将其“保存”到数据库中,包括时间和日期。起初我想过使用NOW()(mysql)并让服务器/ db做了很多工作但后来我意识到服务器时间和客户端时间之间存在差异。

为了解决这个问题,每当我调用在数据库中存储此信息的API时,我都会将客户端日期时间作为参数之一传递。没什么大问题的,我只是想知道,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

你对服务器有控制权吗?

您无法确保客户端的日期/时间是正确的,因此请改用服务器时间(即使它在给定点上是正确的,它可能会更改并且会给您不一致的结果)。

服务器和客户端时间不同的唯一正当理由是它们位于不同的时区(如果由于其他原因它们不同,则是客户端的问题,而不是您的问题)。

解决方案是将客户端时区与UTC时间戳(时间戳)一起存储在服务器上,让数据库或脚本执行转换以向客户端显示正确的日期/时间。

我不太清楚mysql处理日期/时间值的方法,但看起来你不能自动存储时区和时间值,所以你必须手动完成:

  • 创建附加到每个客户端的时区列。
  • 每当您在mysql中存储日期/时间时,将其从您的服务器时区转换为UTC:GMT + 0(Mysql可能会自动执行此操作)。
  • 每当客户端检索日期/时间时:获取UTC时间和时区,然后进行转换(这可以在客户端或服务器端完成)。

大多数网络语言都有管理日期/时间和时区的标准方法。

您也可以设置mysql会话时区,如下所示:mysql timestamp tutorial但我认为第一个解决方案更灵活,而不依赖于mysql。

我希望现在更清楚了。