【发布时间】:2015-03-29 08:48:00
【问题描述】:
我正在开发一个移动应用程序。从应用程序调用基于模式 (?mode=xx) 运行不同查询的 Web 服务
在其中一些查询中,我使用日期函数,例如 DATE(NOW())。
存储在 MySQL 数据库中的数据存储在 GMT-7(加拿大山地时间)。
我尚未为此 Web 服务注册域/主机,但当我注册时,可以说它托管在另一个城市,例如多伦多(格林威治标准时间 5 - 提前 2 小时)。然后在加拿大山区时间晚上 10:05,用户使用该应用程序发送一个 Web 请求调用,该调用具有如下查询:
SELECT DATE(NOW())
由于服务器托管在多伦多,因此将返回明天的日期,即使用户所在的位置是前一天,并且应用程序根据当天显示数据。
有人对此有什么想法吗?
编辑:
SYSTEM
2015-01-29 16:19:48
2015-01-29 23:19:48
是运行查询的结果 select @@time_zone, now(), utc_timestamp()
查询处理日期 (yyyy-mm-dd) 和时间 (hh:mm:ss) 列类型。
【问题讨论】:
-
使用
timestamp列数据类型来存储日期值。由于它是 UTC,因此实际时区无关紧要。您所要做的就是获取正在使用您的数据库的用户的时区,以便您可以根据他们的时区格式化时间。 -
@RyanVincent - 你错了,好吧,一切。但是,如果您认为自己是对的,请随时发布答案。另外,我希望你是一个聪明的人,我只想礼貌地让你知道我有 0 意图或愿意进入互联网与你争论所以让我们节省我们的时间并停止交谈在我发帖后互相交流。
-
@andrewb - 正确,您可以将用户的时区传递给 Web 服务,或者在客户端应用程序上使用时间后“询问”设备的时区。我不喜欢移动开发,但在 JavaScript 中,我知道如何在不将该信息传递给服务器的情况下获取使用该网站的人的当前时区。很多事情都是可能的,但重要的是在数据库上节省公共时区和格式的时间。它使时区偏移变得容易。
-
@N.B 很抱歉我的困惑 - 我从 cmets 针对我自己提供的有用 cmets 中学到了很多东西。感谢大家分享您的知识。我很感激。说真的,我错了,学到了很多。
标签: mysql datetime timezone unix-timestamp datetime-conversion