4

我有一个过程,我在 Zulu 或 UTC 时间读入一堆 ISO 8601 格式的字符串。例如,

2012-06-20T21:15:00Z
2012-06-20T21:16:00Z
2012-06-20T21:17:00Z
2012-06-20T21:18:00Z

我将字符串转换为可识别时区的 python 日期时间对象,然后通过将它们转换为 Unix 时间戳将它们以二进制格式保存为整数。例如,

dt_str = '2012-06-20T21:15:00Z'
ts = int(mktime(datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%SZ').timetuple()))
# ts = 1340241300

当我将这些时间戳读回另一个进程时,我想直接从时间戳实例化一个 numpy.datetime64 对象。问题是 datetime64 将时区设置为我的本地时区。

np_dt = np.datetime64(ts,'s')
# np_dt = numpy.datetime64('2012-06-20T21:15:00-0400')

有谁知道我可以在我的时间戳中读取的一种方式,以便它是 UTC 时间?我希望 np_dt 等于 numpy.datetime64('2012-06-20T21:15:00-0000')...我想。

问候

4

3 回答 3

4

如何为您的代码设置时区。

import os, time
os.environ['TZ'] = 'GMT'
time.tzset()
# then your code 
np_dt = np.datetime64(ts,'s')
于 2012-06-20T22:16:14.823 回答
1

您可以使用dateutil模块来提供帮助。首先,从您保存的时间戳整数创建一个日期时间对象:

>>> ts = 1340241300
>>> import datetime
>>> from dateutil import tz
>>> dt = datetime.datetime.fromtimestamp(ts).replace(tzinfo=tz.tzutc())
>>> dt
datetime.datetime(2012, 6, 20, 21, 15, tzinfo=tzutc())

然后将其传递给numpy,它将其转换为本地时区(我在-4):

>>> import numpy as np
>>> np.datetime64(dt.isoformat())
numpy.datetime64('2012-06-20T17:15:00-0400')
于 2012-06-20T22:38:46.553 回答
0

文档来看,唯一的方法是从直接指定时区的字符串中创建它。因此,您需要首先创建一个datetime.datetime对象并将其格式化为'Z'附加的字符串,然后numpy.datetime64从中构造。

于 2012-06-20T22:08:18.560 回答