2015-10-22 76 views
1

我为我的应用程序使用mysql,并且应用程序是营业时间驱动的。MySQL UTC到当地时区

现在在我的系统的时间

下午8点53。 (EST)

select now(); -> returns 2015-10-21 20:52:48 

select utc_timestamp(); -> returns 2015-10-22 00:53:50 

我想时间到用户时区特定的时间转换。

因此,使用下面的查询来转换为用户特定的时区。

select CONVERT_TZ(utc_timestamp(),'+00:00','-05:00'); 

上述查询返回

2015年10月21日19时55分49秒

它认为夏令时。但是,我希望能够在我的系统中返回当前时间> 2015-10-21 20:55:49。

有无论如何指示convert tz查询不考虑夏令时?

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); 

上述查询返回

-04:00:00

我预计这将返回-05:00,因为我的EST。

谢谢

回答

2

其实,你有它倒退。当您指定-05:00时,即考虑夏令时,即而不是。它不能,因为你只提供了一个偏移量。

之后,你说你预计它会返回-05:00,但是如果你在美国东部时间,那么目前(直到2015年11月1日)夏令时是有效的。你在EDT,这是-04:00

因此SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);给出了正确的结果。如果你想CONVERT_TZ给出正确的结果,那么你可以这样做:

select CONVERT_TZ(utc_timestamp(),'+00:00','SYSTEM'); 

传递SYSTEM使用系统的本地时区,这是你问什么。但是,使用名为时区的通常更好,比如America/New_York。要使用这些,请确保您的MySQL安装已正确设置为time zone support