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

问题描述:

我正在开发一个客户端应用程序,当用户阅读的东西,我“拯救”它的数据库,包括时间和日期。起初,我想到使用NOW()(mysql),并让服务器/数据库做了艰苦的工作,但后来我意识到服务器时间和客户端时间之间存在差异。客户端 - >服务器的时间差异和时间存储

为了克服这个问题,每当我调用存储在数据库这个信息的API,我通过客户端日期时间的参数之一。没什么大不了的,我只是想知道,有没有更好的方法来做到这一点?

你有控制服务器吗?

你不能确保客户端的日期/时间将是正确的,所以使用服务器时间,而不是(哪怕是在一个给定的点可能会改变,会给你不一致的结果是正确的)。

服务器和客户端的时间是不同的,唯一有效的原因是,他们是在不同的时区(如果有差别的另一个原因是,它是客户端的问题,不是你的)。

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

我不熟悉的处理日期/时间值MySQL的方式,但它看来,你不能自动时区存储与时间值一起,所以你必须手动完成:

  • 创建附加到每个客户端的时区列。
  • 每当你存储在MySQL的日期/时间从你的服务器时区将其转换为UTC:GMT + 0(mysql的可能会自动做到这一点)。
  • 每当客户端检索日期/时间:获取UTC时间和时区,并将其转换(这可以在客户的身边,或者服务器端进行,要么)。

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

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

我希望现在更清楚。

+0

问题在于时区。如果用户在下午2点阅读它,那么数据库会将它存储为下午5点(例如),所以你说我应该存储用户时区,所以无论何时将此信息提取给用户,我都会将其翻译回他的时区?有更自动化的方式吗?你写了一些关于UTC的内容,你能解释一下吗? – Amos 2015-02-23 17:18:22

+0

更新之后:这个问题被分为2:第一个不太可能的是当客户端移动到不同的时区,第二个更可能是MYSQL DB将移动到不同的服务器,这意味着一个不同的时区,所以我保留的所有时区将是无关的 – Amos 2015-02-24 10:07:28

+0

这就是为什么你必须将日期/时间存储为UTC。这样它将始终保持一致。如果您的服务器移动到另一个时区:无关紧要,则每个事件都存储为UTC。如果客户移动到不同的时区:有多种方式可以根据您的需要进行管理:让用户更改所有记录的TZ配置,并且每个日期/时间都将用新的时间进行调整或添加时区历史记录。 – dyslesia 2015-03-01 12:11:56