Escribí una aplicación de escritorio y estaba usando datetime.datetime.utcnow()
para marcar el tiempo, sin embargo, recientemente he notado que algunas personas que usan la aplicación obtienen resultados muy diferentes a los que tengo cuando ejecutamos el programa al mismo tiempo. ¿Hay alguna forma de obtener la hora UTC localmente sin usar urllib para buscarla desde un sitio web?¿Cómo puedo obtener una hora UTC precisa con Python?
Respuesta
Python depende del sistema operativo subyacente para proporcionar un reloj preciso de hora del día. Si no está haciendo eso, no tiene otra opción que no sea omitir el o/s. Hay una implementación pura de Python de un cliente NTP here. Un enfoque muy simplista:
>>> 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)
Sin embargo, no sería muy agradable estar golpeando continuamente en otros servidores NTP por ahí. Un buen ciudadano de la red utilizaría la biblioteca del cliente de ntp para realizar un seguimiento de la compensación entre el reloj del sistema de o/sy la obtenida del servidor y solo sondear periódicamente para ajustar la hora.
En realidad, ntplib calcula esta contabilidad de compensación para el retraso de ida y vuelta. Está disponible a través del atributo "desplazamiento" de la respuesta NTP. Por lo tanto, el resultado no debería ser muy salvaje.
Es un comentario útil, pero no es una respuesta. Deberías moverlo a los comentarios de arriba. – jfs
Creo que proporciona una especie de respuesta en la forma en que la observación de OP (resultados muy diferentes) puede ser incorrecta. ¿Y cómo alguien quiere obtener hora UTC localmente sin tener un reloj atómico? – Trilarion
@Trilarion: No veo nada inusual que diferentes computadoras devuelvan tiempo diferente. Incluso [si la hora está sincronizada usando ntp; puede diferir en decenas de milisegundos en Internet] (http://stackoverflow.com/a/97939/4279). No necesita un reloj atómico local, para obtener la hora UTC (que no se conoce en tiempo real de todos modos si desea decenas de nanosegundos de precisión) con precisión de milisegundos, puede usar el GPS (por ejemplo, a través del mismo software ntp) Para la escala: [los efectos relativistas son microsegundos por día aquí] (http://www.astronomy.ohio-state.edu/~pogge/Ast162/Unit5/gps.html) – jfs
- 1. obtener hora UTC en PHP
- 2. C# Hora GMT equivalente con hora UTC?
- 3. Servidor SQL: Convierta entre hora UTC y hora local de manera precisa
- 4. ¿Cómo puedo configurar un calendario con hora UTC?
- 5. Android obtener la hora UTC actual
- 6. Cómo obtener la hora UTC en jQuery datetimepicker
- 7. Cómo obtener una medida de ping precisa
- 8. Android: ¿Cómo obtener una altitud precisa?
- 9. Convertir hora UTC/GMT a hora local
- 10. Convertir hora UTC a fecha hora local
- 11. Generando hora UTC en java
- 12. Python: desde hora local ajustada por DST a UTC
- 13. ¿Cómo puedo convertir un objeto de fecha y hora de Python a UTC?
- 14. cómo generar una marca de hora UTC Unix en C#
- 15. ¿Cómo mostrar una hora UTC como hora local en una página web?
- 16. ¿System.currentTimeMillis representa la hora UTC?
- 17. impresión hora correcta con zonas horarias, Python
- 18. convertir la hora local, de alguien a la hora UTC
- 19. Cómo calcular la hora local desde una fecha y hora utc en tsql (sql 2005)?
- 20. convertir hora utc y desplazamiento a DateTime
- 21. PHP UTC a la hora local
- 22. ¿Cómo puedo obtener el desplazamiento utc en Rails?
- 23. ¿Cómo puedo obtener milisegundos desde la medianoche UTC en C?
- 24. ¿clock_gettime es una hora UTC o la zona horaria local?
- 25. Convertir hora local a UTC en Rails
- 26. C# UTC a los usuarios Hora local
- 27. Hora Joda: Convertir UTC a local
- 28. Sincronización precisa con RequestAnimationFrame
- 29. Cómo forzar a QDateTime :: fromString a leer la hora UTC
- 30. strftime en una fecha y hora Django produce una hora UTC en la cadena
Y con monkeypatching, puede registrar ese desplazamiento y cambiar el método de la biblioteca de fecha y hora para aplicar el desplazamiento siempre que alguna parte de la aplicación solicite la hora. Sería bueno si la biblioteca de hora y fecha y hora manejara este tipo de compensación automáticamente. Podría decir que quiere tiempo real, golpearía un servidor NTP, registraría el desplazamiento y lo aplicaría cada vez que se utilizara ese tiempo. –
Esto no tiene en cuenta el "tiempo de ida y vuelta" de realizar la solicitud. Lo que quiere hacer es usar 'time.clock()' para medir cuánto tiempo ''Eclient()' tomó para responder, dividirlo por la mitad y agregarlo a la hora dada. Eso es exacto –