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

如何用Python将特定格式的frame.time转换为Unix时间戳?

问题:将JSON中的特定时间格式转换为Unix时间戳

场景说明

JSON数据中存在如下格式的时间字段:

"frame.time": "Dec  7, 2023 06:55:20.320000000 Mitteleuropäische Zeit"

需要通过Python将其转换为Unix时间戳用于导出CSV,但运行代码时出现格式匹配错误。

原代码问题分析

原代码存在以下关键错误:

  1. 字段获取错误:代码中使用ev['_source']['layers']['frame'].get('frame.time_epoch', {}),但实际JSON中对应的字段是frame.time,导致获取的时间值无效。
  2. 格式字符串不匹配:
    • 错误在格式串中添加了utf-8,这不属于时间格式的一部分
    • 原时间的纳秒部分(.320000000)用%f无法匹配(%f仅处理6位微秒)
    • 时区名称因编码问题乱码(错误信息中显示为Mitteleuropäische Zeit),导致格式匹配失败
  3. 未处理时区转换:未指定时区信息,无法准确生成基于UTC的Unix时间戳

修正方案

方案1:使用pandas处理

修正字段获取、格式字符串,并正确处理时区:

import pandas as pd
import json
from zoneinfo import ZoneInfo  # Python3.9+ 可用,低版本可替换为pytz

# 假设ev为单条JSON数据
frame_time = ev['_source']['layers']['frame'].get('frame.time')
# 中欧时间对应时区标识符为'Europe/Berlin'
dt_object = pd.to_datetime(
    frame_time,
    format="%b  %d, %Y %H:%M:%S.%f000 Mitteleuropäische Zeit",
    errors='raise'
).tz_localize('Europe/Berlin').tz_convert('UTC')

# 转换为Unix时间戳(保留小数)
unix_timestamp = dt_object.timestamp()

extracted_values.append({
    "[1] frame.number": ev['_source']['layers']['frame']['frame.number'],
    "[2] frame.time": unix_timestamp
})

# 写入文件时指定UTF-8编码避免乱码
with open('extracted_values.json', 'w', encoding='utf-8') as f:  
    json.dump(extracted_values, f, indent=2, separators=(', \n', ': '), ensure_ascii=False)

方案2:使用标准库datetime处理

不依赖pandas,用Python标准库实现:

import json
from datetime import datetime
from zoneinfo import ZoneInfo

frame_time = ev['_source']['layers']['frame'].get('frame.time')
# 拆分时间字符串,分离时区部分
time_part, _ = frame_time.rsplit(' ', 1)
# 去掉纳秒后三位0,转为微秒格式
dt_str = time_part[:-3]
dt = datetime.strptime(dt_str, "%b  %d, %Y %H:%M:%S.%f")

# 指定时区并转换为UTC
dt_berlin = dt.replace(tzinfo=ZoneInfo('Europe/Berlin'))
dt_utc = dt_berlin.astimezone(ZoneInfo('UTC'))
# 生成Unix时间戳
unix_timestamp = dt_utc.timestamp()

extracted_values.append({
    "[1] frame.number": ev['_source']['layers']['frame']['frame.number'],
    "[2] frame.time": unix_timestamp
})

with open('extracted_values.json', 'w', encoding='utf-8') as f:  
    json.dump(extracted_values, f, indent=2, separators=(', \n', ': '), ensure_ascii=False)

关键注意点

  • 读取和写入文件时指定encoding='utf-8',避免时区名称乱码
  • 中欧时间对应时区标识符Europe/Berlin,会自动处理夏令时切换
  • Unix时间戳基于UTC,必须将本地时间转换为UTC后再生成

内容的提问来源于stack exchange,提问作者DHAVAL TARAPRA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:47:04