如何将RESTful API返回的datetime列整数值转换为datetime格式?
毫秒级时间戳转datetime格式解决方案
你从接口拿到的13位整数值是毫秒级Unix时间戳,Python标准时间转换方法默认接收秒级时间戳,转换前需要先做精度调整,不同场景的处理方案如下:
原生Python手动转换
单条数据转换示例:
import datetime # 示例毫秒时间戳 timestamp = 1622332800000 # 除以1000转为秒级后转换为datetime dt = datetime.datetime.fromtimestamp(timestamp / 1000) print(dt) # 输出(本地时区):2021-05-30 08:00:00
需要UTC标准时间的话可以用以下方法:
import datetime timestamp = 1622332800000 dt_utc = datetime.datetime.utcfromtimestamp(timestamp / 1000) print(dt_utc) # 输出(UTC时区):2021-05-30 00:00:00
批量转换时间戳列表
如果拿到的是批量时间戳列表,可以直接用列表推导式处理:
import datetime ts_list = [1622332800000, 1622937600000, 1623542400000, 1624147200000] dt_list = [datetime.datetime.fromtimestamp(ts / 1000) for ts in ts_list]
SQLAlchemy层面自动转换(可选)
如果是你自行开发的RESTful接口,可以在ORM层配置自动转换逻辑,避免每次接口返回后手动处理:
from sqlalchemy import Column, DATETIME from sqlalchemy.ext.hybrid import hybrid_property import datetime from base import base # 替换为你实际的基类导入路径 class Table(base): __tablename__ = "你的表名" # 把原datetime列重命名为私有字段存储 _datetime = Column("datetime", DATETIME) @hybrid_property def datetime(self): # 读取时直接返回datetime对象,接口序列化时可直接转为标准时间字符串 return self._datetime @datetime.setter def datetime(self, value): # 写入时如果传入的是整数时间戳自动转换为datetime格式 if isinstance(value, int): self._datetime = datetime.datetime.fromtimestamp(value / 1000) else: self._datetime = value
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

