将 numpy.datetime64 转换为纪元时间

convert numpy.datetime64 into epoch time

我正在尝试将包含 numpy.datetime64 的 numpy 数组 new_feat_dt 转换为纪元时间。我想确保转换发生时日期保持为 utc 格式? 我正在使用 numpy 1.16.4 和 python3.6 我尝试了两种转换方式,如下代码所示。

import numpy as np
new_feat_dt = [np.datetime64('2019-07-25T14:23:01'), np.datetime64('2019-07-25T14:25:01'), np.datetime64('2019-07-25T14:27:01')]

final= [(x - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's') for x in new_feat_dt]
print (final)
print(type(final[0]))

final2= [np.datetime64(x,'s').astype(int)  for x in new_feat_dt]
print (final2)
print(type(final2[0]))

以上代码的输出:

[1564064581.0, 1564064701.0, 1564064821.0]
<class 'numpy.float64'>
[1564064581, 1564064701, 1564064821]
<class 'numpy.int32'>

以上是因为 new_feat_dt 数组中的时间被认为是 GMT。我希望它被视为我的当地时间,即 ('US/Eastern')。 正确的转换应该是这样的: [1564078981,1564079101,1564079221]

numpy.datetime64timezone naive datetime type。要将时区信息添加到日期时间中,请尝试将 python 的 datetimepytz 模块一起使用。

import numpy as np
import pytz
from datetime import datetime
new_feat_dt = [np.datetime64('2019-07-25T14:23:01'), np.datetime64('2019-07-25T14:25:01'), np.datetime64('2019-07-25T14:27:01')]
eastern = pytz.timezone('US/Eastern')
final = [int(eastern.localize(dt.astype(datetime)).timestamp()) for dt in new_feat_dt]
print(final)

输出:

[1564078981, 1564079101, 1564079221]

最好使用 datetime.datetime 初始化所有 new_feat_dt