fix: 时区统一北京时区 — Edge(UTC机器)三处时间处理修复
背景: Oracle Edge 机器为 UTC 时区,NAS 与视频均为北京时间,
网页要求统一北京时区。排查结论: NAS 端(北京时间)与 UI(直读
MariaDB)均正确,问题集中在 Edge 端三处。
1. queue_manager: 7 处 datetime('now','localtime') 在 UTC 机器上
写入 UTC 时间(比北京慢8h),全部改为 datetime('now','+8 hours')
2. preprocessor.compute_timestamps: event_start_time 缺失时 fallback
datetime.now() 用了 Edge 本地时间(UTC),改为北京时间
datetime.now(timezone(+8h));带时区的 ISO 输入统一转北京时间
3. nvidia_adapter._ts_to_seconds: 不支持生产格式
'YYYY-MM-DD HH:MM:SS'(split后int抛ValueError全部返回-1),
导致集锦视频永远为空、视频模式永远降级逐帧——上一轮引入的
bug,测试用 HH:MM:SS 格式未暴露。现支持两种格式;drawtext
标签与提示词同步为完整时间戳说明
数据修正: event 17(task 298 手动测试缺 event_start_time)的
frame_timestamp 全为 UTC,按视频文件名真实时间(04:34:10)重算;
Edge 队列存量时间戳 +8h。
验证: 单测三例通过(生产格式解析/fallback北京时间/ISO带时区转换);
task 41 新代码正确写入北京时间 17:36:52。
This commit is contained in:
@@ -287,10 +287,15 @@ class VideoPreprocessor:
|
||||
duration = frame_count * 60 # 兜底
|
||||
|
||||
interval = duration / frame_count
|
||||
from datetime import timedelta, timezone
|
||||
# 统一北京时区: 视频均为北京时间录制,Edge 机器是 UTC,
|
||||
# fallback 不能用本地 datetime.now()
|
||||
try:
|
||||
start_dt = datetime.fromisoformat(event_start_time.replace('Z', '+00:00'))
|
||||
if start_dt.tzinfo is not None:
|
||||
start_dt = start_dt.astimezone(timezone(timedelta(hours=8))).replace(tzinfo=None)
|
||||
except Exception:
|
||||
start_dt = datetime.now()
|
||||
start_dt = datetime.now(timezone(timedelta(hours=8))).replace(tzinfo=None)
|
||||
|
||||
timestamps = []
|
||||
for i in range(frame_count):
|
||||
|
||||
Reference in New Issue
Block a user