如何强制Python打印指定时区的numpy datetime64?

15 投票
3 回答
18310 浏览
提问于 2025-04-18 16:02

我想要按照我指定的时区来查看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')。有没有办法强制Python以UTC+0000时区来打印呢?

我使用的是numpy 1.8.1。

3 个回答

3

你可以在打印你的 datetime64 对象之前,先设置一下时区:

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

>>> numpy.datetime64(0, 's')
numpy.datetime64('1970-01-01T00:00:00+0000')
6

有没有办法让Python的打印输出使用UTC+0000时区呢?

你可以使用.item()这个方法,它会返回一个“天真的”datetime对象,这个对象表示的是UTC时间。在你的例子中可以这样使用:

>>> 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
8

numpy的文档中提到过几次:

datetime对象表示一个特定的时间点。

...

日期时间总是基于POSIX时间来存储的...

所以,内部的datetime64实际上是在跟踪一个整数,这个整数表示自UNIX纪元(1970年1月1日)以来的某个时刻——不算闰秒。

因此,时区信息不会被保留。如果你传入一个时区偏移量,它会用这个偏移量来计算正确的UTC时间。如果你没有传入,系统会使用本地机器的时区。不管你输入什么,输出时都会使用本地机器的时区,把UTC时间转换成本地时间加上偏移量。

撰写回答