parse example create biblioteca python python-2.7 datetime utc

example - Python datetime.utcnow() devuelve datetime incorrecto



strftime python (3)

El problema solo ocurre con utc time (Python3).

Por ejemplo, hora del sistema:

$ date Wed Jul 15 10:44:26 BST 2015

Tiempo de Python correcto cuando se usa datetime.now ():

>>> datetime.now() datetime.datetime(2015, 7, 15, 10, 44, 30, 775840)

... Pero incorrecto en una hora cuando se usa datetime.utcnow ():

>>> datetime.utcnow() datetime.datetime(2015, 7, 15, 9, 44, 32, 599823)

El problema de UTC es que no conoce mi zona horaria.

Tienes que decirlo, con la ayuda de un módulo de zona horaria llamado pytz:

>>> import pytz >>> mytz = pytz.timezone(''Europe/London'') >>> pytz.utc.localize(datetime.utcnow(), is_dst=None).astimezone(mytz) datetime.datetime(2015, 7, 15, 11, 3, 43, 688681, tzinfo=<DstTzInfo ''Europe/London'' BST+1:00:00 DST>)

Referencias

pytz - Convertir UTC y zona horaria a hora local

https://opensourcehacker.com/2008/06/30/relativity-of-time-shortcomings-in-python-datetime-and-workaround/

http://sweemengs-tech-world.blogspot.co.uk/2010/05/get-correct-datetime-value-for-python.html

http://bugs.python.org/issue5094 )

datetime.utcnow()

Esta llamada está devolviendo una fecha y hora incorrecta, retrasada desde UTC / GMT por 1 hora (consulte: http://www.worldtimeserver.com/current_time_in_UTC.asp ).

¿Funciona como debería ser?

Por ejemplo, está regresando, en este momento:

2015-02-17 23:58:44.761000.

La hora actual UTC es: 00:58, no 23:58


Sé que estoy tremendamente tarde en responder a esto.

He intentado hacer esto recientemente y, por lo tanto, sugiero usar datetime.now() lugar de datetime.utcnow() . Para mi aplicación simple que funciona bien.


datetime.utcnow() usa los valores proporcionados por el sistema operativo.

datetime.utcnow() usa gettimeofday(2) o time.time() en Python 2 (y gmtime(3) para convertir el resultado en tiempo desglosado).

time.time() usa gettimeofday(2) , ftime(3) , time(2) . Las versiones más recientes de CPython pueden usar clock_gettime(2) , GetSystemTimeAsFileTime() .

Puede verificar la autoconsistencia de la siguiente manera:

#!/usr/bin/env python import time from datetime import datetime, timedelta print(datetime.utcnow()) print(datetime(1970, 1, 1) + timedelta(seconds=time.time())) print(datetime(*time.gmtime()[:6]))

Aquí hay un código (no probado) que llama a GetSystemTimeAsFileTime() en Windows basado en la fuente CPython :

#!/usr/bin/env python import ctypes.wintypes from datetime import datetime, timedelta def utcnow_microseconds(): system_time = ctypes.wintypes.FILETIME() ctypes.windll.kernel32.GetSystemTimeAsFileTime(ctypes.byref(system_time)) large = (system_time.dwHighDateTime << 32) + system_time.dwLowDateTime return large // 10 - 11644473600000000 print(datetime(1970, 1, 1) + timedelta(microseconds=utcnow_microseconds()))

Aquí hay un código que llama a clock_gettime() en Python 2 .