【问题标题】:Incorrect representation of utc time in mysql datetimemysql datetime 中 UTC 时间的不正确表示
【发布时间】:2012-11-20 19:16:52
【问题描述】:

所以我有这个应用程序可以接收来自手机的包裹,包括 gps 时间,即 UTC。我目前从 php 将其存储在我的 mysql 数据库中。

我有两个日期时间字段,一个包含电话时间,另一个是服务器时间。

我的查询如下所示:INSERT INTO GeoLocation(Time, ServerTime) VALUES(FROM_UNIXTIME(1353438497), UTC_TIMESTAMP())

我简化并删除了所有其他值。当前的 UTC unix 时间戳现在是:1353438597 与 http://www.unixtimestamp.com/index.php 一致,所以我的另一个手机时间戳是 100 秒,非常有意义。

现在到了有趣的地方。我应该提一下,我住在瑞典,时区为 +1,服务器位于瑞典,很可能配置为瑞典时间

当我使用 phpmyadmin 查看刚刚插入的值时,它说时间是 2012-11-20 20:08:17 但服务器时间是 2012-11-20 19:08:23。因此,即使两者都是正确的 utc 时间,一个输入 ass From_unixtime 而另一个输入 UTC_TIMESTAMP 他们现在显示不同的时间。

我读到您需要使用 SET time_zone = '+00:00'; 设置时区;

所以我尝试在phpmyadmin中打开一个查询窗口并输入

SET time_zone = '+00:00';
SELECT Time, ServerTime FROM `GeoLocation` WHERE 1;

但我仍然得到两个字段报告的完全相同的时间。

然而 phpmyadmin 确实运行了两行,因为如果我改为尝试这个:

SELECT @ @global.time_zone , @ @session.time_zone

我明白了:

@@global.time_zone @@session.time_zone

系统系统

但如果我这样做:

SET time_zone = '+00:00';
SELECT @@global.time_zone, @@session.time_zone

我明白了:

@@global.time_zone @@session.time_zone

系统 +00:00

所以这对我来说没有任何意义,我已经确认我提供了 UTC 时间(从 unix 时间开始),但它显示为 UTC+1 并且它无助于设置时区。

有什么想法吗?

【问题讨论】:

    标签: mysql datetime utc


    【解决方案1】:

    解决办法是执行“SET time_zone = '+00:00';”在数据库中存储数据之前(插入)。

    读取数据时它对你没有好处,但如果你在存储数据时调用它,一切都会好起来的。

    【讨论】:

    • 如果您使用 .net 和实体框架,您还必须在获取如下值时告诉它时间是 utc:DateTime.SpecifyKind((DateTime)loc.Time, DateTimeKind.Utc );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2022-06-16
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2019-02-16
    • 2022-01-17
    相关资源
    最近更新 更多