为什么从 np.datetime64 到 float 并返回的转换会导致时间差异?

use*_*395 3 python numpy

使用以下代码,在转换回 np.datetime64 后,我得到了两个小时的差异。

我怎样才能避免这种情况?(如果这应该成为一个主题:我目前在中欧)

import pandas as pd
import numpy as np
import datetime

a = np.datetime64('2018-04-01T15:30:00').astype("float")
a
b = np.datetime64(datetime.datetime.fromtimestamp(a))
b

Out[18]: numpy.datetime64('2018-04-01T17:30:00.000000')
Run Code Online (Sandbox Code Playgroud)

Rob*_*bbe 7

问题不在于np.datetime64转换,而在于datetime.datetime.fromtimestamp

\n\n

从 Numpy 1.11 开始np.datetime64时区是天真的。它不再假设输入是当地时间,也不再打印当地时间。

\n\n

但是,datetime.datetime.fromtimestamp确实假设当地时间。来自文档

\n\n
\n

返回与 POSIX 时间戳对应的本地日期和时间,例如 time.time() 返回的。如果可选参数 tz 为 None 或未指定,则时间戳将转换为 platform\xe2\x80\x99s 本地日期和时间,并且返回的 datetime 对象是朴素的。

\n
\n\n

您可以使用datetime.datetime.utcfromtimestamp

\n\n
>>> a = np.datetime64(\'2018-04-01T15:30:00\').astype("float")\n>>> np.datetime64(datetime.datetime.utcfromtimestamp(a))\nnumpy.datetime64(\'2018-04-01T15:30:00.000000\')\n
Run Code Online (Sandbox Code Playgroud)\n