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
相关产品推荐
相关产品推荐

