2011-08-09 48 views
0

在我的数据库中,我将时间存储为BIGINT UTC值。将UTC时间字符串转换为Unix时间

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

我环顾四周,我发现了UTC时间字符串转换为UNIX时间戳的唯一方法是使用这个表达式:

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

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

回答

1

如果您将其存储为时间戳而不是bigint,则只会通过设置时区自动发生。

此外,我不太明白你在做什么。您正在存储unixtime,因为您的bigint列正确吗?所以我不明白你为什么使用unix_timestamp()函数 - 它将TO转换为unixtime,而不是它。

我想这是你所需要的:

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

我的数据来自于与unix时间戳和熄灭作为Unix的时间戳是很有意义将其存储为一个BIGINT。我使用unix_timestamp的原因是,我可以读取进入数据库的日期。否则,我的测试数据会被我无法轻易读取的unix时间戳所散布。 – Frederik

+0

不,它不。将它作为时间戳存储是有意义的。 unix_timestamp将* TO *转换为一个unix时间(一个数字)。你的意思是'from_unixtime()'?因为你所要做的就是将当前的时区设置为utc,它将会正常工作。此外,时间戳自动转换为人类可读的日期。 (您选择+0将它们转换为数字。) – Ariel

+0

但是,我们现在将它们存储为数字,这不会改变。然而,在我的测试代码中,我想将它们看作UTC日期/时间字符串。你有什么想法如何做这种转换(没有在数据库中设置UTC - 我没有任何控制权) – Frederik