[RESOLU] problème d'heure dans requête mysql (heure d'hiver)

problème d'heure dans requête mysql (heure d'hiver) [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 11-10-2007 à 23:07:31    

Bonsoir à tous!
 
Je suis en train d'apprendre à utiliser un outil de CRM pour entreprise, qui est programé en php, et l'un des modules de ce CRM est un outil de Reporting qui envoie des requêtes dans une base de données afin de sortir des rapports sous forme de tables.  
 
Le problème que j'ai rencontré se présente quand je veux faire une requête d'affichage de calendrier: Toutes les requêtes qui concernent des dates antérieures au 28 octobre 2007 se déroulent correctement. A partir de cette date, Toutes les heures de réunion sont décalées d'une heure. (passage à l'heure d'hiver. Une heure se sera donc écoulée en plus en temps absolu par rapport à notre horloge CET).
 
Cela vient du fait que l'interface du CRM affiche les heures réelles, mais stocke dans la DB des temps absolus UTC. Lors de la requête, si j'utilise des fonctions TIME ou DATE, et que j'ajuste l'heure avec un DATE_ADD, j'additionne tout le temps 1 ou tout le temps 2h, il m'est donc impossible d'obtenir une heure correcte pour toutes les requêtes.  
 
Auriez-vous une solution à ce problème?
 
Note: J'ai vu dans l'aide de MySQL qu'il existait une fonction de conversion de fuseau horaire TZCONVERT (ou qqch comme ça, je n'ai pas les pages sous les yeux) à laquelle on fournit l'heure de départ, le fuseau de départ, et le fuseau d'arrivée. Pour que cette requête fonctionne il faut remplir les tables qui commencent par time dans la table mysql présente par défaut lors de l'installation, mais je n'arrive pas à les remplir... une aide sur ces tables (ou un petit export si les votres sont remplies) pourrait être une solution!
 
Merci d'avance


Message édité par pikpik164 le 12-10-2007 à 10:45:41
Reply

Marsh Posté le 11-10-2007 à 23:07:31   

Reply

Marsh Posté le 12-10-2007 à 10:28:36    

C'est tout bien expliqué ici :
 
http://dev.mysql.com/doc/refman/5. [...] pport.html

Reply

Marsh Posté le 12-10-2007 à 10:41:12    

Voilà, au bout d'une heure de travail au bureau, je suis en mesure de transformer ce topic en mini tuto :-)
 
En fait, il faut savoir qu'un dossier sur les fuseaux horaires existe sur les OS Linux et MacOS par défaut, et qu'il se trouve souvent dans /usr/share/zoneinfo/. Il faut aussi savoir qu'il existe quelques scripts s'exécutant dans mysql, et quelques autres hors de mysql (pour les OS précités, je ne sais pas encore ce qu'il en est pour windows).  
On peut maintenant remplir les tables concernant les fuseaux horaires de MySQL.  
 
il faut taper, dans un SHELL:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root --password mysql
Cette commande remplira les tables time_zone et assimilées de la database mysql (raison du dernier mysql de cette ligne).
 
Ensuite, connaître les noms des fuseaux horaires, la syntaxe de la commande convert_tz() and enjoy!
exemple (pour vérifier si ça a fonctionné comme attendu):  
 
SELECT CONVERT_TZ('2007-10-27 02:00:00','UTC','CET');
retour:  
2007-10-27 04:00:00
 
SELECT CONVERT_TZ('2007-10-28 02:00:00','UTC','CET');
retour:
2007-10-28 03:00:00
 
et hop, je peux imprimer mon calendrier ad vitam eternam!  
(à moins qu'un clown ne vienne changer les règles de changement d'horaires (comme Georges cette année pour les états-unis et le Canada :D))
 
Liens utilisés:
http://doc.domainepublic.net/mysql [...] pport.html
http://dev.mysql.com/doc/refman/5. [...] convert-tz
 
PS: pour la version windows, j'ai été nettement moins subtil, et j'ai fait un bête et méchant copier coller des fichiers fonctionnels présents sur le serveur Linux... ça marche!


Message édité par pikpik164 le 12-10-2007 à 11:43:19
Reply

Marsh Posté le 12-10-2007 à 10:44:59    

merci :D
 
j'avais mal recopié les commandes hier soir sur le serveur, et ça avait foiré, alors j'avais vite posté mon message :-) mais je reviendrai sans doute bientôt avec d'autres questions ;-)

Reply

Marsh Posté le 19-10-2007 à 16:12:09    

No comment
[quote]
[mysql]
 
default-character-set=latin1
 
 
# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this  
# file.
#
[mysqld]
 
#Definir le param de time zone pour gestion heure été/hiver
default-time-zone='+00:00'
[quote]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed