Question

This sounds simple enough but I haven't been able to figure out how to use a simple SELECT statement to return the current time in GMT.

I have been trying to use CONVERT_TZ() to convert NOW() to GMT based on the server time zone and the GMT time zone but for some reason it returns NULL when I put in the text time zones. The only way I get a result is to actually put in the offsets which is getting way too complicated for what should be a really simple operation. Here is what I mean:

mysql> SELECT CONVERT_TZ(NOW(),@@global.system_time_zone,'GMT');
NULL

mysql> SELECT CONVERT_TZ(NOW(),'PST','GMT');
NULL

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');
2010-02-13 18:28:22

All I need is a simple query to return the current time in GMT. Thanks in advance for your help!

Was it helpful?

Solution

Just use UTC (doesnt get affected with daylight savings time)

SELECT UTC_TIMESTAMP();

Old Content for reference:

this should work, but with

SELECT CONVERT_TZ(NOW(),'PST','GMT');

i got also NULL as result. funny enough the example in the mysql docu also returns null

SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz seems you found a bug in mysql. (thanks to +Stephen Pritchard)

you could try:

SET @OLD_TIME_ZONE=@@TIME_ZONE;
SET TIME_ZONE='+00:00';
SELECT NOW();
SET TIME_ZONE=@OLD_TIME_ZONE;

ok is not exactly what you wanted (its 4 queries, but only one select :-)

OTHER TIPS

NO BUG in CONVERT_TZ()

To use CONVERT_TZ() you need to install the time-zone tables otherwise MySql returns NULL.

From the CLI run the following as root

# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

SEE http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

Thanks

http://www.ArcanaVision.com (SJP 2011-08-18)

Note: GMT might have DST UTC does not have DST

SELECT UTC_TIMESTAMP();

I made a cheatsheet here: Should MySQL have its timezone set to UTC?

The surefire way to fetch the current UTC datetime is:

SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')

After seeing all the answers above and seeing it's unreliable to convert to PST, I just used this:

DATE_SUB(user_last_login, INTERVAL 7 hour)

This should work - I think you are specified your timezone wrong. Using Chicago as example

SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')

When the source server timestamp is unknown but the requirement is for a specific tz do this:

select convert_tz(utc_timestamp(),'+05:00','+00:00')

This uses CST as an example. utc_timestamp will guarantee a '+00:00' result no matter where you query it. The '+05:00' is your desired offset. This works great when hitting multiple unknown servers and it assures you that you returning result will all be in a common tz result set.

I was searching for my time zone which is GMT+6 (Asia/Dhaka TimeZone)

MySQL server is in US. The below worked for me.

SELECT CONVERT_TZ( UTC_TIMESTAMP( ) , '+06:00', '+00:00' )

There is no bug in CONVERT_TZ function. You get NULL because you use time zones names/abbreviations. Mysql does not know what this 'GMT','PST', etc means unless you install mysql.time_zone_name table. However if you use numbers it will always work.

mysql> SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT');

returns NULL

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');

returns 2016-06-24 17:58:33

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top