无法将保存的datetime64转回timestamp及datetime.datetime.now()格式求助
解决datetime64与时间戳、datetime.datetime的转换问题
错误原因
你遇到的报错核心问题是字符串类型和numpy.datetime64类型无法直接运算:row[0]是字符串(<U18),而numpy.datetime64(0, "s")是datetime64类型,两者不能直接相减。
修复当前硬编码代码的方法
你的row[0]是微秒级时间戳的字符串形式,先把它转成数值类型再处理即可:
方法1:直接转成datetime.datetime对象
import numpy as np import datetime row = [] row.append("1681903801863912.0") # 先把字符串转成微秒级整数时间戳 ts_micro = int(float(row[0])) # 转成datetime.datetime格式 dt = datetime.datetime.fromtimestamp(ts_micro / 1000000) print(dt)
方法2:转成numpy.datetime64后再处理
import numpy as np import datetime row = [] row.append("1681903801863912.0") # 字符串转微秒级数值 ts_micro = int(float(row[0])) # 构造numpy.datetime64对象 date64 = np.datetime64(ts_micro, "us") # 转成秒级时间戳 ts_second = (date64 - np.datetime64(0, "s")) / np.timedelta64(1, "s") print(ts_second) # 转成datetime.datetime格式 dt = date64.astype(datetime.datetime) print(dt)
规范保存与还原流程
从你之前的转换代码来看,建议保存时直接存储数值类型的时间戳或标准datetime64格式,避免转成字符串后出错:
正确的保存流程(从datetime.datetime到可存储格式)
import numpy as np import datetime # 获取当前时间并转成datetime64 date64 = np.datetime64(datetime.datetime.now()) # 转成微秒级时间戳(数值类型,方便存储) ts_micro = (date64 - np.datetime64(0, "us")) / np.timedelta64(1, "us") # 存入列表(或其他存储介质) saved_data = [ts_micro]
正确的还原流程
# 从存储的数值还原 ts_micro = saved_data[0] # 转成numpy.datetime64 date64 = np.datetime64(int(ts_micro), "us") # 转成datetime.datetime dt = date64.astype(datetime.datetime) print(dt)
内容的提问来源于stack exchange,提问作者user14379397
相关产品推荐
相关产品推荐

