Requête MySQL pour L'heure GMT actuelle

cela semble assez simple, mais je n'ai pas été en mesure de comprendre comment utiliser une simple instruction SELECT pour retourner l'heure actuelle en GMT.

j'ai essayé d'utiliser CONVERT_TZ () pour convertir maintenant() en GMT basé sur le fuseau horaire du serveur et le fuseau horaire GMT mais pour une raison quelconque il retourne NULL quand je mets dans les zones de temps de texte. La seule façon d'obtenir un résultat est de mettre réellement dans les compensations qui devient beaucoup trop compliqué pour ce que ça devrait être une opération très simple. Voici ce que je veux dire:

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

Tout ce dont j'ai besoin est une simple requête pour retourner l'heure actuelle au format GMT. Merci d'avance pour votre aide!

24
demandé sur fedorqui 2010-02-13 19:34:09

10 réponses

il suffit d'utiliser UTC (ne pas être affecté par l'heure avancée)

SELECT UTC_TIMESTAMP();

ancien contenu de référence:

ça devrait marcher, mais avec

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

J'ai eu aussi NULL comme résultat. assez drôle l'exemple dans le mysql docu renvoie aussi 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 semble que vous ayez trouvé un bug dans mysql . (merci à +Stephen Pritchard)

vous pouvez essayer:

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

ok n'est pas exactement ce que tu voulais (4 requêtes, mais un seul select :-)

34
répondu Rufinus 2018-04-13 16:20:56

NO BUG in CONVERT_TZ ()

pour utiliser CONVERT_TZ() vous devez installer les tables de fuseau horaire sinon MySql retourne NULL.

à partir du CLI exécuter ce qui suit comme root

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

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

Merci

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

13
répondu Stephen Pritchard 2011-08-18 16:31:27

Note: GMT pourrait avoir DST UTC n'a pas DST

SELECT UTC_TIMESTAMP();

j'ai fait un cheatsheet ici: MySQL doit-il avoir son fuseau horaire réglé sur UTC?

11
répondu Timo Huovinen 2017-05-23 12:25:02

la façon surefire de récupérer le courant UTC datetime est:

SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')
4
répondu FrankerZ 2015-11-24 20:53:58

après avoir vu toutes les réponses ci-dessus et vu qu'il n'est pas fiable de convertir en PST, je viens d'utiliser ceci:

DATE_SUB (user_last_login, intervalle de 7 heures)

0
répondu Mauvis Ledford 2012-03-16 23:33:57

cela devrait fonctionner - je pense que vous avez spécifié votre fuseau horaire incorrect. En utilisant Chicago comme exemple

SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')
0
répondu konung 2015-10-13 22:50:49

lorsque le timestamp du serveur source est inconnu mais que l'exigence est pour un tz spécifique faites ceci:

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

cet exemple utilise CST. utc_timestamp garantira un résultat' +00:00 ' peu importe où vous l'interrogez. Le' + 05:00 ' Est votre offset désiré. Cela fonctionne très bien lors de la frappe de plusieurs serveurs inconnus et il vous assure que votre résultat de retour sera tout dans un ensemble de résultats TZ commun.

0
répondu Mark 2016-09-15 16:09:38

je cherchais mon fuseau horaire qui est GMT+6 (Asia / Dhaka TimeZone)

MySQL server est en nous. Le dessous a fonctionné pour moi.

SÉLECTIONNEZ CONVERT_TZ( UTC_TIMESTAMP( ) , '+06:00', '+00:00' )

0
répondu Zakaria Bin Abdur Rouf 2017-12-26 08:22:36

ça devrait marcher SELECT date_add (UTC_TIMESTAMP (), interval 330 minute);

0
répondu Anand Vishwakarma 2018-07-17 06:13:55

il n'y a pas de bogue dans la fonction CONVERT_TZ. Vous obtenez NULL parce que vous utilisez des noms/abréviations de fuseaux horaires. Mysql ne sait pas ce que signifie ce'GMT',' PST', etc sauf si vous installez mysql.time_zone_name table. Cependant, si vous utilisez des nombres, cela fonctionnera toujours.

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

renvoie NULL

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

retourne 2016-06-24 17:58: 33

-1
répondu Daniel 2016-06-24 14:13:04