python - 为什么从 np.datetime64 到 float 和 back 的转换会导致时差?

标签 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')

最佳答案

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

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

但是,datetime.datetime.fromtimestamp 确实采用本地时间。来自docs :

Return the local date and time corresponding to the POSIX timestamp, such as is returned by time.time(). If optional argument tz is None or not specified, the timestamp is converted to the platform’s local date and time, and the returned datetime object is naive.

您可以使用 datetime.datetime.utcfromtimestamp相反:

>>> a = np.datetime64('2018-04-01T15:30:00').astype("float")
>>> np.datetime64(datetime.datetime.utcfromtimestamp(a))
numpy.datetime64('2018-04-01T15:30:00.000000')

关于python - 为什么从 np.datetime64 到 float 和 back 的转换会导致时差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54304423/

相关文章:

python - 如果我只切出 1 列与切出多列,为什么 numpy 的行为会有所不同?

python - 同时分配 numpy/torch 轴的多个不同切片

python - 如何将 elasticsearch 库的日志记录级别设置为与我自己的日志记录不同?

python - 如何获取 pandas DataFrame 的 bool 索引数组,其中 obs != last_obs?

python - 列 <column> 不存在(Django 1.8)

python - 在不移动位置的情况下重用 matplotlib 中的补丁对象

python - 结合 python 列表和 numpy 数组的问题?

python - 如何使用在对角线上具有特定值 K 的 numpy 创建单位矩阵

python - 多次更新python numpy数组列

python - python中如何将unicode字符转换成各自的符号?