J'ai hérité d'une application héritée où toutes les dates et heures sont stockées dans le fuseau horaire local (UK). Je ne suis pas en mesure de changer la façon dont ils sont stockés.Détecter si une date est en heure d'été dans MySQL
Cependant, l'exigence est d'afficher toutes les dates en GMT dans l'application. Par conséquent, lorsque je récupère une liste d'événements de la base de données, j'en ai besoin pour les afficher tous dans ce format horaire tout en observant si l'heure d'été est en cours pour chaque date d'événement particulière. En utilisant la logique suivante je peux déterminer si le changement d'été est activée dans la requête:
IF(CAST(TIMEDIFF(NOW(), UTC_TIMESTAMP()) AS SIGNED) >0,
DATE_FORMAT(CONVERT_TZ(ADDTIME(`event_date`, IFNULL(`event_time`, '00:00')), '+01:00', '+00:00'), '%H:%i'), `event_time`) AS event_time
Ceci est cependant évident que la date vérifier qu'il est en cours d'exécution à. Ainsi, les événements futurs qui traversent les limites de l'heure d'été ne fonctionnent pas.
Existe-t-il un moyen que je peux détecter si une date donnée est en heure d'été dans la requête mysql elle-même?
Toute aide, très appréciée.
Pouvez-vous pas utiliser la fonction CONVERT_TZ dans une base MySQL? Ou ne vous donne-t-il pas les bons résultats? http://dev.mysql.com/doc/refman/5.1/fr/date-and-time-functions.html#function_convert-tz – Dave
Je le fais. Le point est que j'ai besoin de savoir si l'appliquer ou non. Comme il est stocké en heure locale, certains d'entre eux sont GMT + 1 autres sont GMT + 0. Je ne peux pas l'appliquer sans discernement à tous. J'ai donc besoin de savoir si la date est +1 ou non –
J'avais l'impression que CONVERT_TZ prenait automatiquement en compte l'heure d'été basée sur le contenu des tables time_zone_blah, donc si celles-ci sont correctement configurées, vous devriez pouvoir simplement faites 'CONVERT_TZ (event_time," US/Eastern "," GMT ")' et faites-le donner l'heure exacte en GMT – Dave