Heidisql: Affichage de l'horodatage incorrect en tant que valeur de date dans la grille

Créé le 31 janv. 2018  ·  5Commentaires  ·  Source: HeidiSQL/HeidiSQL

Paramètre "Il s'agit d'une colonne d'horodatage UNIX" actif dans les options d'affichage de la grille pour voir un horodatage UNIX comme représentation de la date.

Comportement prévisible

La valeur suivante (horodatage unix) est stockée en tant que BIGINT dans la base de données :
1098655200
GMT : dimanche 24 octobre 2004 à 22 h 00
Berlin : lundi 25 octobre 2004 00:00:00 GMT-02:00 DST

La grille devrait s'afficher ici :
24-10-2004 22:00:00 (GMT) ou
2004-11-25 00:00:00 (Local)

Comportement actuel

La grille montre :
24-10-2004 23:00:00

Il semble que le fuseau horaire momentané soit utilisé pour afficher la valeur, et il s'agit de GMT+1 à compter d'aujourd'hui (2018-01-31) en Allemagne, pas d'heure d'été.
La valeur doit être affichée en fonction du fuseau horaire à la date spécifiée, qui était GMT+2, heure d'été active.

Étapes à reproduire

  1. Créez une colonne BIGINT et insérez une valeur de 1098655200
  2. Définissez "Options d'affichage de la grille" sur "Ceci est une colonne d'horodatage UNIX"
  3. Vous obtiendrez : 24-10-2004 23:00:00
  4. Prévu : 25-11-2004 00:00:00

Le contexte

  • Version HeidiSQL : 9.5.0.5196
  • Système de base de données + version : MariaDB 10.2.12
  • Système d'exploitation : Windows 10, Fuseau horaire Europe/Berlin
bug

Tous les 5 commentaires

hey @mpaland , votre MariaDB fonctionne avec le bon fuseau horaire Europe/Berlin ?
Je ne gère pas beaucoup de conversions, l'horodatage écrit en UTC, n'est-ce pas ? et MySQL convertit dans votre fuseau horaire ?

J'ai essayé de reproduire mais sur les serveurs que j'ai c'est sans les fuseaux horaires installés :(

@lukinhaspm ce n'est pas une question de serveur, c'est juste une question de représentation correcte de l'horodatage dans HeidiSQL. Un TIMESTAMP UNIX est toujours censé être en secondes après 1970-01-01 00:00:00 UTC.

Vous pouvez présenter un tel horodatage strictement en UTC, ce qui est bien, ou dans un certain fuseau horaire (principalement le propre). Pour ce faire, il faut le fuseau horaire valide à la date d'horodatage, pas à la date réelle.
Il semble que HeidiSQL prenne la date réelle. Je n'ai pas encore regardé dans son code, ce n'est donc qu'une spéculation.

@mpaland je comprends et je suis d'accord !

J'ai étudié cela un peu plus loin. Malheureusement, la solution ne semble pas facile.
Le problème, ce sont les règles compliquées de l'heure d'été (heure d'été) partout dans le monde et pire encore, leur forme non constante et en constante évolution.
Pour obtenir l'heure locale DST corrigée pour un certain horodatage d'époque, il est nécessaire de connaître la règle DST exacte qui a été appliquée localement à l'heure de l'horodatage.
Une bibliothèque de conversion doit garder une trace de tous les changements de règles d'heure d'été dans chaque pays au fil des ans pour calculer le décalage pour n'importe quel moment dans le passé.
Windows ignore complètement ce problème et convertit toujours selon la règle _actual_ DST au moment de la conversion.
Pour le faire correctement, il est nécessaire d'utiliser l'une des bibliothèques de fuseau horaire/DST vraiment avancées sur le net.

Bien que la plupart de ce que @mpaland a déclaré au sujet de la nécessité de connaître la règle DST appliquée lors de la création de l'horodatage soit techniquement vrai (si nous abandonnons l'heure d'été, par exemple, tous les moments enregistrés alors qu'elle était active "passeraient" à la non-lumière du jour relative gain de temps), il est toujours possible d'utiliser les règles DST actuelles pour afficher correctement l'heure d'un horodatage.

1584975600 et 1585576800 sont tous les deux à 16h00 à Europe/Madrid, mais heidisql représente incorrectement l'un d'entre eux (selon si nous sommes à l'heure d'été ou non)

Il pourrait être possible d'afficher correctement ces cas sans que cela soit un gros problème en vérifiant simplement si l'heure résultante doit être à l'heure d'été ou non et en appliquant le décalage correct.

Même si ce n'est pas une solution parfaite, je dirais qu'elle couvre probablement la plupart des cas d'utilisation, et que les cas limites seraient probablement facilement repérables, c'est plus une petite aide pour les développeurs pour vérifier que quelque chose va bien qu'un affichage fiable de l'utilisateur final de toute façon.

Cette page vous a été utile?
0 / 5 - 0 notes