获取 [Errno 22] datetime.utcfromtimestamp() 中的参数无效

问题描述 投票:0回答:1

我正在使用 python 3.10.6。我有这个函数,它接受一个 netcdf 文件,并从该文件的数据中为 dmin 和 dmax 分配时间索引的最小和最大日期。每当 dmin 低于 1970(即 1969 及以下)时,我都会收到以下错误:

xmin = datetime.utcfromtimestamp((dmin - sec0) / sec1).date() OSError:
[Errno 22] 参数无效

这是我的代码:

def get_minmax_date(data):
    dmin = data['time'].values.min()
    dmax = data['time'].values.max()

    sec0 = np.datetime64(0, 's')
    sec1 = np.timedelta64(1, 's')
    xmin = datetime.utcfromtimestamp((dmin - sec0) / sec1).date()
    xmax = datetime.utcfromtimestamp((dmax - sec0) / sec1).date() + timedelta(days=1)

    return xmin, xmax

我知道这是日期时间库中的一个错误,但有什么解决方法吗?

python python-3.x numpy datetime netcdf
1个回答
0
投票

由于您似乎已经在使用 pandas,因此最好简化为

import pandas as pd

def get_minmax_date(data):
    dmin = data['time'].min() # use pandas.Timestamp here...
    dmax = data['time'].max()
    xmin = dmin.date()
    xmax = (dmax + pd.Timedelta(days=1)).date()
    return xmin, xmax


df = pd.DataFrame({"time":[pd.Timestamp("now"), pd.Timestamp("now")]})

print(get_minmax_date(df))
# (datetime.date(2023, 3, 25), datetime.date(2023, 3, 26))

您还可以通过删除对

.date()
的调用并改用
.floor("d")
来始终如一地使用 pd.Timestamps。请注意,pandas datetime 中没有日期和时间的分离。

© www.soinside.com 2019 - 2024. All rights reserved.