You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中datetime.utcfromtimestamp处理1970年前日期报错的解决办法

解决NetCDF时间提取中1970年前日期转换报错的方案

原代码报错是因为datetime.utcfromtimestamp依赖系统底层时间戳实现,部分环境下不支持1970年1月1日之前的负时间戳,导致抛出OSError: [Errno 22] Invalid argument。以下是几个可行的规避方案:

方案1:使用numpy原生转换(无额外依赖)

直接将numpy的datetime64类型转换为Python的datetime对象,跳过时间戳计算步骤,彻底避开负时间戳限制:

from datetime import datetime, timedelta
import numpy as np

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

    # 直接转换numpy datetime64到Python datetime
    xmin = dmin.astype(datetime).date()
    xmax = dmax.astype(datetime).date() + timedelta(days=1)

    return xmin, xmax

方案2:利用numpy datetime64的.item()方法

另一种原生转换方式,通过.item()直接提取Python datetime对象:

from datetime import datetime, timedelta

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

    xmin = dmin.item().date()
    xmax = dmax.item().date() + timedelta(days=1)

    return xmin, xmax

方案3:用pandas辅助转换(适合已有pandas依赖的项目)

如果项目本身使用pandas处理数据,pd.to_datetime对各类时间格式兼容性更强,也能完美处理1970年前的日期:

from datetime import timedelta
import pandas as pd

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

    xmin = pd.to_datetime(dmin).date()
    xmax = pd.to_datetime(dmax).date() + timedelta(days=1)

    return xmin, xmax

内容的提问来源于stack exchange,提问作者pwnkit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:00:07