J'ai écrit une application de bureau et j'utilisais datetime.datetime.utcnow()
pour l'horodatage, mais j'ai récemment remarqué que certaines personnes utilisant l'application obtiennent des résultats très différents de ce que je fais lorsque nous exécutons le programme en même temps. Est-il possible d'obtenir l'heure UTC localement sans utiliser urllib pour la récupérer sur un site Web?Comment puis-je obtenir une heure UTC précise avec Python?
Répondre
Python dépend du système d'exploitation sous-jacent pour fournir une horloge précise de l'heure. Si ce n'est pas le cas, vous n'avez pas beaucoup d'autre choix que de contourner les o/s. Il existe une implémentation pure-Python d'un client NTP here. Une approche très simple d'esprit:
>>> import ntplib,datetime
>>> x = ntplib.NTPClient()
>>> datetime.datetime.utcfromtimestamp(x.request('europe.pool.ntp.org').tx_time)
datetime.datetime(2009, 10, 21, 7, 1, 54, 716657)
Cependant, il ne serait pas très agréable d'être frapper continuellement sur d'autres serveurs NTP là-bas. Un bon citoyen net utiliserait la bibliothèque cliente ntp pour garder trace du décalage entre l'horloge système du système d'exploitation et celle obtenue du serveur et n'interrogerait que périodiquement pour ajuster l'heure.
En fait, ntplib calcule cette comptabilisation de décalage pour le temps de propagation aller-retour. Il est disponible via l'attribut "offset" de la réponse NTP. Par conséquent, le résultat ne devrait pas très follement.
C'est un commentaire utile mais ce n'est pas une réponse. Vous devriez le déplacer dans les commentaires ci-dessus. – jfs
Je pense que cela fournit une sorte de réponse dans la façon dont l'observation de l'OP (résultats très différents) peut être fausse. Et comment quelqu'un veut-il avoir du temps UTC localement sans avoir une horloge atomique? – Trilarion
@Trilarion: Je ne vois rien d'inhabituel à ce que des ordinateurs différents reviennent à un autre moment. Même [si l'heure est synchronisée en utilisant ntp; il peut différer de quelques dizaines de millisecondes sur Internet] (http://stackoverflow.com/a/97939/4279). Vous n'avez pas besoin d'une horloge atomique locale pour obtenir l'heure UTC (qui n'est pas connue en temps réel si vous voulez des dizaines de nanosecondes de précision) avec une précision de microsecondes, vous pouvez utiliser le GPS (par exemple via le même logiciel ntp). Pour l'échelle: [les effets relativistes sont des microsecondes par jour ici] (http://www.astronomy.ohio-state.edu/~pogge/Ast162/Unit5/gps.html) – jfs
- 1. uint64 UTC heure
- 2. Calculer les minutes jusqu'à une heure précise? (C)
- 3. Comment spécifier le fuseau horaire (UTC) lors de la conversion en heure Unix? (Python)
- 4. Comment puis-je exécuter une application à une heure précise sur l'iPhone?
- 5. Comment obtenir des millisecondes depuis minuit UTC en C?
- 6. Comment créer une heure UTC en C pour un jour, un mois et une année spécifiques?
- 7. Météo pour une date précise?
- 8. Comment convertir l'heure UTC en heure dans n'importe quel autre fuseau horaire en C#
- 9. Est-il possible d'obtenir un fuseau horaire en Python avec un horodatage UTC et un décalage UTC?
- 10. Comment obtenir la valeur UTC pour SYSDATE sur Oracle
- 11. Comment conserver UTC dans un CDateTimeCtrl?
- 12. Convertir en horodatage UTC
- 13. Java ResultSet comment getTimestamp UTC
- 14. Python, Convert 9 Date UTC tuple à MySQL format datetime
- 15. Convertir une chaîne avec date et heure à une date
- 16. Axapta/DynamicsAx: Conversion datetime UTC
- 17. Comment vérifier une date au format UTC avec une expression régulière?
- 18. Comment arrondir une heure dans T-SQL
- 19. Impression matricielle rapide avec mise en page précise en Java
- 20. Comment calculer précisément l'heure UTC actuelle via strtotime?
- 21. Comment obtenir une représentation chaîne Unicode Standard (ou autre) du format date + heure de l'utilisateur?
- 22. Comment convertir DateTime.now en UTC dans Ruby?
- 23. Comment utiliser Zend_Date pour imprimer une heure dans un fuseau horaire spécifique
- 24. TIMESTAMP UTC Entier
- 25. Comment obtenir l'instance de module pour une classe en Python?
- 26. Comment imprimer une sortie avec python?
- 27. Python introspection: Comment obtenir une liste 'non triée' d'attributs d'objets?
- 28. python-mysql: Comment obtenir une chaîne de requête interpolée?
- 29. <100uS précise dort sur Windows CE
- 30. pytz utc conversion
Et avec monkeypatching, vous pouvez enregistrer ce décalage et modifier la méthode de la bibliothèque datetime pour appliquer le décalage chaque fois qu'une partie de l'application demande l'heure. Ce serait bien que la bibliothèque time et datetime gère automatiquement ce type de décalage. Vous pouvez lui dire que vous voulez du temps réel, il va frapper un serveur NTP, enregistrer le décalage, et l'appliquer chaque fois que ce temps est utilisé. –
Cela ne tient pas compte du "temps d'aller-retour" de la demande. Ce que vous voulez faire est d'utiliser 'time.clock()' pour mesurer combien de temps 'NTPClient()' a pris pour répondre, divisez-le en deux et ajoutez-le à l'heure donnée. C'est exact. –