【问题标题】:Converting a UTC time string to Unix time将 UTC 时间字符串转换为 Unix 时间
【发布时间】:2011-08-09 08:00:43
【问题描述】:

在我的数据库中,我将时间存储为 BIGINT UTC 值。

在我的测试数据 SQL 转储中,为了便于阅读,我想查看 UTC 时间。但是,MySQL unix_timestamp 函数需要本地时区的时间,我试图避免这种情况。

我环顾四周,发现将 UTC 时间字符串转换为 unix 时间戳的唯一方法是使用以下表达式:

SELECT unix_timestamp(CONVERT_TZ('2011-08-08 06:00:00','UTC',@@global.time_zone))

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: mysql convert-tz


    【解决方案1】:

    如果您将其存储为时间戳而不是 bigint,只需设置时区即可自动发生。

    另外,我真的不明白你在做什么。您将 unixtime 存储为您的 bigint 列是否正确?所以我不明白你为什么要使用 unix_timestamp() 函数 - 它转换为 unixtime,而不是来自它。

    我想这就是你需要的:

    SET time_zone = '+0:00';
    SELECT FROM_UNIXTIME(col) FROM table;
    

    【讨论】:

    • 我的数据以 Unix 时间戳的形式传入,以 Unix 时间戳的形式传出,因此将其存储为 BIGINT 是有意义的。我使用 unix_timestamp 的原因是我可以读取进入数据库的日期。否则我的测试数据中充斥着无法轻松读取的 unix 时间戳。
    • 不,它没有。将其存储为时间戳是有意义的。 unix_timestamp 将 TO 转换为 unix 时间(数字)。你的意思是from_unixtime()?因为您所要做的就是将当前时区设置为 UTC,它就可以正常工作。最重要的是,时间戳会自动转换为人类可读的日期。 (您选择它们​​ +0 以将它们转换为数字。)
    • 不过,我们现在将它们存储为数字,这不会改变。但是,在我的测试代码中,我希望将它们视为 UTC 日期/时间字符串。你知道如何进行这种转换(没有在数据库中设置 UTC——我对此没有任何控制权)
    • SET time_zone = '+0:00'; SELECT FROM_UNIXTIME(col) ....;这只会影响当前连接,不会改变数据库。
    • 啊,我不知道这是每个连接。正是我需要的。谢谢!
    猜你喜欢
    • 2019-10-29
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多