2011-04-04 206 views
3

我有一堆数据作为一堆unix样式时间戳(UTC)存储在mysql数据库中。以前,这些已经通过Perl的gmtime()进行了格式化。看起来MySQL的FROM_UNIXTIME()函数试图有帮助,并正确的夏令时,但我真的不希望它。如何在MySql中将unix时间戳转换为UTC日期?

将结果从系统时区(GMT/BST)转换为UTC或者确定DST是否在特定时间生效是否有一个很好的方便方法?

回答

3

你试过:

mysql> SELECT NOW(); 
+---------------------+ 
| NOW()    | 
+---------------------+ 
| 2011-04-04 22:54:13 | 
+---------------------+ 
1 row in set (0.00 sec) 

mysql> set @var = unix_timestamp(NOW()); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SET time_zone='+00:00'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT NOW(); 
+---------------------+ 
| NOW()    | 
+---------------------+ 
| 2011-04-04 20:54:23 | 
+---------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT FROM_UNIXTIME(@var); 
+---------------------+ 
| FROM_UNIXTIME(@var) | 
+---------------------+ 
| 2011-04-04 20:54:17 | 
+---------------------+ 
1 row in set (0.02 sec) 

如果你想使用命名的时区,你可以看到this page更多的信息,以及如何来填补你的系统上的时区表。

+1

这很好。谢谢你Wrikken。我只是在这里添加一些代码供我参考,所以我不会忘记何时搜索我的收藏夹。 set blahblah = convert_tz(from_unixtime(blahblah),@@ session.time_zone,'+ 00:00'); – codingknob 2013-05-16 22:38:24

+0

确实适合每种情况,因此取决于您是否需要_all_日期/时间相关字段来反映另一个时区,或者只是一个_single_,选择一个或另一个。 – Wrikken 2013-05-16 22:40:45

相关问题