13

我想按我指定的时区查看 numpy datetime64 对象。

>>> 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 始终以 UTC+0400(这是我的本地时区)打印日期时间对象,即使我指定了另一个时区>>> np.datetime64('2013-03-10T01:30:54+0300')。有没有办法通过 UTC+0000 时区强制 python 打印?

我正在使用 numpy 1.8.1 。

4

3 回答 3

7

在numpy 文档中提到过几次:

datetime 对象代表一个时间点。

...

日期时间始终基于 POSIX 时间存储...

因此,在内部,一个 datetime64 正在跟踪一个整数,它表示自 UNIX 纪元 (1970-01-01) 以来的一个时刻作为一个值 - 不计算闰秒。

因此,不保留时区。如果您传入时区偏移量,它将应用它来确定正确的 UTC 时间。如果你不通过一个,它将使用本地机器的时区。无论输入如何,在输出时,它都会使用本地机器的时区将 UTC 时间投影到具有偏移的本地时间。

于 2014-08-06T14:44:41.057 回答
6

有没有办法通过 UTC+0000 时区强制 python 打印?

在您的示例中,您可以调用它返回一个表示数据的 UTC 时间.item()的天真对象:datetime

>>> 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
于 2014-08-31T14:38:46.883 回答
3

您始终可以在打印datetime64对象之前设置时区:

>>> import os, time, numpy
>>> os.environ['TZ'] = 'GMT'
>>> time.tzset()

>>> numpy.datetime64(0, 's')
numpy.datetime64('1970-01-01T00:00:00+0000')
于 2015-09-24T14:32:17.327 回答