python datetime numpy timezone datetime64

Cómo forzar python print numpy datetime64 con la zona horaria especificada?



timezone (3)

Quiero ver numpy datetime64 objetos por mi zona horaria especificada.

>>> import numpy as np >>> np.datetime64(''2013-03-10T01:30:54'') numpy.datetime64(''2013-03-10T01:30:54+0400'') >>> np.datetime64(''2013-03-10T01:30:54+0300'') numpy.datetime64(''2013-03-10T02:30:54+0400'')

Python imprime los objetos datetime siempre en UTC + 0400 (es mi zona horaria local) incluso si especifico otra zona horaria >>> np.datetime64(''2013-03-10T01:30:54+0300'') . ¿Hay alguna manera de forzar la impresión de pitón por UTC + 0000 zona horaria?

Estoy usando numpy 1.8.1.


¿Hay alguna manera de forzar la impresión de pitón por UTC + 0000 zona horaria?

Puede llamar a .item() que devuelve un objeto datetime ingenuo que representa el tiempo en UTC en los datos de su ejemplo:

>>> import numpy >>> numpy.__version__ ''1.8.1'' >>> dt = numpy.datetime64(''2013-03-10T01:30:54+0300'') >>> dt numpy.datetime64(''2013-03-10T02:30:54+0400'') >>> dt.item() datetime.datetime(2013, 3, 9, 22, 30, 54) >>> print(dt.item()) 2013-03-09 22:30:54


Mencionado algunas veces en la documentación numpy :

El objeto datetime representa un solo momento en el tiempo.

...

Datetimes siempre se almacenan en función del tiempo POSIX ...

Por lo tanto, internamente, un datetime64 está rastreando un único entero, que representa un momento en el tiempo como un valor desde la época de UNIX (1970-01-01), sin contar los segundos de salto.

Por lo tanto, las zonas horarias no se conservan. Si transfiere una compensación de zona horaria, la aplicará para determinar la hora UTC correcta. Si no pasa uno, usará la zona horaria de la máquina local. Independientemente de la entrada, en la salida utiliza la zona horaria de la máquina local para proyectar la hora UTC a una hora local con desplazamiento.


Siempre puede configurar el huso horario antes de imprimir sus objetos datetime64 :

>>> import os, time, numpy >>> os.environ[''TZ''] = ''GMT'' >>> time.tzset() >>> numpy.datetime64(0, ''s'') numpy.datetime64(''1970-01-01T00:00:00+0000'')