datetime.fromtimestamp vs datetime.utcfromtimestamp, lequel est le plus sûr à utiliser?
Je suis la collecte de certaines données à partir de capteurs, et j'ai l'horodatage de cette façon:
"time": {
"seconds": 40,
"year": 115,
"month": 5,
"hours": 7,
"time": 1434549820776,
"date": 17,
"minutes": 3,
"day": 3,
"timezoneOffset": 420
},
J'ai un script python qui traite les données provenant des capteurs (données entrantes est un format json), je prends la valeur de time
et se convertit en lisible format de l'heure.
J'ai utilisé datetime.fromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')
et qui a renvoyé '2015-06-17 15:03:40'
Où, comme le datetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')
Retourné: '2015-06-17 14:03:40'
Que vous le pouvez, il est une heure de décalage, donc ma question est quel est le meilleur à utiliser?
d'abord les sorties dans vos messages ne sont pas différents ... seconde, il dépend de ce que vous voulez, voulez-vous l'heure de votre fuseau horaire local ou en Temps Universel Coordonné (UTC)? en fait cela dépend si l'horodatage a été écrit en UTC ou heure locale
Je pense qu'ils signifient que la sortie ne correspond pas à la heures:minutes:secondes dans le dict, même après l'ajout de la
Il y avait une erreur dans la question, je l'ai résolu.
Je pense qu'ils signifient que la sortie ne correspond pas à la heures:minutes:secondes dans le dict, même après l'ajout de la
timezoneOffset
c'est une heure de repos. Je ne pense pas qu'il existe un moyen pour nous des inconnus sur internet divine à la façon dont l'heure est venue.utcfromtimestamp
devrait toujours donner des résultats cohérents, à n'importe quelle heure de la zone où vous êtes. Mais lorsque vous l'exécutez, vous obtenez 15:03:40
et je reçois 14:03:40
- est-il une sorte de couper et coller erreur dans la question?Il y avait une erreur dans la question, je l'ai résolu.
OriginalL'auteur cyberbemon | 2015-06-18
Vous devez vous connecter pour publier un commentaire.
Regardant votre json, vous pouvez voir que le temps de tampon correspond à 2015-06-17 07:03:40 localement.
La timezoneOffset vous dit qu'il y a 7 heures de décalage entre l'heure locale et l'heure UTC => l'heure UTC correspondant à votre json est 2015-06-17 14:03:40.
Puisque c'est ce que vous obtenez lors de l'utilisation de
datetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')
(=> '2015-06-17 14:03:40'), cela signifie que votre horodatage est écrit dans l'heure UTC et vous devez donc utiliserutcfromtimestamp
si vous voulez être exact.15:03:40
mais quand je l'ai essayer moi-même, je reçois14:03:40
trop.OriginalL'auteur Julien Spronck
Les deux sont corrects, simplement, ils ne vous donnent pas en même temps. Les deux supposent que le timestamp est le nombre de millisecondes à partir de l'ÉPOQUE (normalement 1/01/1970 00:00 UTC) et :
fromtimestamp
vous donner la date et l'heure dans le fuseau horaire localutcfromtimestamp
vous donne la date et l'heure UTC.Que je ne sais pas où vous vivez (royaume-UNI ?) Je ne peux pas en dire plus, en Espagne, en France, en Belgique et au Danemark, l'heure locale est UTC + 1 en hiver et UTC + 2 en été.
Vous doit savoir si vous avez besoin de temps UTC ou heure locale.
OriginalL'auteur Serge Ballesta
Bref si vous voulez utiliser ce qui fonctionne. Idéalement, votre documentation contiendra dans quel fuseau horaire les capteurs rapport de leur temps. Probablement, il est dans le même fuseau horaire que la personne qui configure les capteurs mis leur temps, en premier lieu, parce qu'il est peu probable que les capteurs de contenir horaire de sensibilisation.
Si vous êtes libre de décider à quelle heure est à l'installation dans les capteurs je recommande généralement d'utiliser UTC parce que cela va vous éviter toutes sortes de problèmes avec l'heure d'été etc. Aussi, il fonctionne bien dans des équipes internationales.
Peut-être même
datetime.fromtimestamp(1434549820776/1000, timezone)
est la bonne réponse si vous ne pouvez pas être sûr que le paramètre de fuseau horaire de l'ordinateur, le programme s'exécute sur et les capteurs de match.OriginalL'auteur textshell