2013-07-27 246 views
1

我正在运行MYSQL 4.1数据库,该数据库存储我们在欧洲运营的办事处的呼叫中心数据。关于FROM_UNIXTIME的困惑

我的MYSQL数据库位于Windows 2003服务器上,该服务器的时区设置为中欧时间,可自动调整为日光节约。

我希望能够生成一份报告,显示欧洲客户在正确时区的日志日期和时间。

我的数据库将呼叫的日志日期/时间存储为unix时间戳。所以,因此存储为UTC的日期。我发现MYSQL函数可以轻松地将日志日期时间调整到您选择的时区。

它叫做CONVERT_TZ。 (更多信息:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz

例子:SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','CET');

我试图将此呼叫已记录在2013年1月6日22:12

CONVERT_TZ(FROM_UNIXTIME(o.logdatex), 'UTC','CET') 'CET_L_DATETIME' 

(logdatex是当unxtimestamp电话被记录)

我的困惑声明返回 - 2013-06-02 00:12:56。

我想看看,当我刚刚选择FROM_UNIXTIME(o.logdatex)

它返回正确的时间返回了什么! 2013-06-01 22:12:56(这个电话是从我们阿姆斯特丹办公室登录的)

我的问题是,FROM_UNIXTIME函数根据时区MYSQL服务器设置为什么自动调整UTC的时间?我找不到任何说明它的文档。

+0

4.1?你为什么运行10年前的软件 – Strawberry

+0

@Strawberry可能是一个错字,因为他提到了5.1手册...... –

+0

@Strawberry感谢您的有用评论。 –

回答

0

我的假设是因为当你做FROM_UNIXTIME(o.logdatex)你从UTC转换到你的服务器的时区。 现在你的日期不在UTC时区。因此,在CONVERT_TZ(FROM_UNIXTIME(o.logdatex), 'UTC','CET')中,您不会从'UTC'进行转换,而是从服务器的时区进行转换,因此您会得到一个奇怪的结果。 尝试选择FROM_UNIXTIME(o.logdatex)作为查询中的单独字段并比较结果。