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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:15:04