如何使用Python转换JSON格式数据中的时间戳为指定日期时间格式
Python Lambda 时间戳批量转指定格式方案
前置准备
- 你需要的目标格式是符合ISO 8601规范的东八区带毫秒时间格式,Python原生
datetime模块的isoformat()方法可直接生成该格式,无需手动拼接字符串 - 若原时间带其他时区信息,转换时统一转至东八区(UTC+8)即可匹配要求
核心转换代码
import datetime import json from pytz import timezone # 定义东八区时区 cst_tz = timezone('Asia/Shanghai') def convert_datetime_fields(obj): # 处理字典类型 if isinstance(obj, dict): return {k: convert_datetime_fields(v) for k, v in obj.items()} # 处理列表/元组类型 elif isinstance(obj, list) or isinstance(obj, tuple): return [convert_datetime_fields(item) for item in obj] # 处理datetime类型 elif isinstance(obj, datetime.datetime): # 转成东八区时间后输出ISO格式 return obj.astimezone(cst_tz).isoformat(timespec='milliseconds') # 其他类型直接返回 else: return obj
注意:如果你的Lambda运行环境使用Python 3.9及以上版本,可将pytz替换为标准库zoneinfo,无需额外安装依赖:
from zoneinfo import ZoneInfo cst_tz = ZoneInfo('Asia/Shanghai')
Lambda 完整使用示例
import datetime import json from pytz import timezone from dateutil.tz import tzlocal # 适配示例中的tzlocal时区类型 cst_tz = timezone('Asia/Shanghai') def convert_datetime_fields(obj): if isinstance(obj, dict): return {k: convert_datetime_fields(v) for k, v in obj.items()} elif isinstance(obj, list) or isinstance(obj, tuple): return [convert_datetime_fields(item) for item in obj] elif isinstance(obj, datetime.datetime): return obj.astimezone(cst_tz).isoformat(timespec='milliseconds') else: return obj def lambda_handler(event, context): # 此处raw_data替换为实际获取的数据源 raw_data = { 'Id': 'jr_e10ba9a2ab867b3abb3b1f8955cfd1815e1ce00cc981230702dfad45fb49a4b9', 'Attempt': 0, 'JobName': 'my_job_name', 'StartedOn': datetime.datetime(2021, 8, 31, 3, 17, 34, 49000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 8, 31, 3, 19, 34, 855000, tzinfo=tzlocal()), 'CompletedOn': datetime.datetime(2021, 8, 31, 3, 19, 34, 855000, tzinfo=tzlocal()), 'JobRunState': 'FAILED' } # 执行转换 processed_data = convert_datetime_fields(raw_data) # 可直接转JSON返回 return { 'statusCode': 200, 'body': json.dumps(processed_data, ensure_ascii=False) }
转换结果示例
你给出的示例数据转换后时间字段输出如下:
"StartedOn": "2021-08-31T11:17:34.049+08:00", "LastModifiedOn": "2021-08-31T11:19:34.855+08:00", "CompletedOn": "2021-08-31T11:19:34.855+08:00"
内容的提问来源于stack exchange,提问作者Michelle Santos
相关产品推荐
相关产品推荐

