将所有时间字段从 UTC 时间改为东八区(Asia/Shanghai)时间,确保时间显示符合中国用户习惯。
| 表名 | 修正的字段 |
|---|---|
data_orders |
created_at, updated_at, processed_at |
data_products |
created_at, updated_at, last_updated_at, last_viewed_at |
metadata_review_records |
created_at, updated_at, resolved_at |
metadata_version_history |
created_at |
新增 app/core/common/timezone_utils.py,提供统一的时区处理:
now_china() - 获取当前东八区时间(带时区信息)now_china_naive() - 获取当前东八区时间(用于数据库存储)to_china_time() - 转换任意时区到东八区utc_to_china_naive() - UTC 转东八区(不带时区信息)新增多个运维脚本,简化部署和故障排查:
scripts/fix_startup.sh - 自动修复启动问题scripts/diagnose_issue.sh - 全面的问题诊断scripts/TROUBLESHOOTING.md - 详细的故障排查指南QUICK_FIX.md - 快速修复指南PYTHON38_COMPATIBILITY.md - Python 3.8 兼容性说明DEPLOYMENT_GUIDE.md - 完整部署指南docs/timezone_fix_summary.md - 技术实现总结代码已完全兼容 Python 3.8 和 3.9+:
try:
from zoneinfo import ZoneInfo # Python 3.9+
except ImportError:
from backports.zoneinfo import ZoneInfo # Python 3.8
Optional[X] → X | Nonetry-except-pass → contextlib.suppress()set(generator) → {set comprehension}app/core/common/timezone_utils.py - 新建app/models/data_product.py - 修改 DataProduct 和 DataOrder 模型app/models/metadata_review.py - 修改两个模型和一个函数app/core/data_service/data_product_service.py - 修改 9 处时间处理app/core/meta_data/redundancy_check.py - 修改时间处理 + 代码优化app/core/business_domain/business_domain.py - 修改时间处理scripts/fix_startup.sh - 新建scripts/diagnose_issue.sh - 新建scripts/TROUBLESHOOTING.md - 新建QUICK_FIX.md - 新建PYTHON38_COMPATIBILITY.md - 新建DEPLOYMENT_GUIDE.md - 新建RELEASE_NOTES.md - 新建(本文件)docs/timezone_fix_summary.md - 新建sudo apt-get install -y tzdata
Python 3.8:
pip install backports.zoneinfo
Python 3.9+: 无需额外安装(使用标准库)
# 1. 上传代码
cd /opt/dataops-platform
git pull origin main
# 2. 运行自动修复脚本
cd scripts
sudo chmod +x fix_startup.sh
sudo ./fix_startup.sh
# 3. 验证部署
sudo supervisorctl status dataops-platform
curl http://localhost:5500/api/system/health
详细步骤请参考 DEPLOYMENT_GUIDE.md
数据库中已存在的记录可能使用 UTC 时间。新旧数据会混合存在。
可选的数据迁移(将历史数据统一为东八区时间):
-- 将 UTC 时间转换为东八区时间(+8小时)
UPDATE data_orders
SET created_at = created_at + INTERVAL '8 hours',
updated_at = updated_at + INTERVAL '8 hours',
processed_at = processed_at + INTERVAL '8 hours'
WHERE created_at < '2026-01-12 00:00:00';
完整的迁移 SQL 请参考 docs/timezone_fix_summary.md
所有 API 返回的时间字段现在表示东八区时间,而不是 UTC 时间。
示例:
{
"created_at": "2026-01-12T18:30:45", // 东八区时间
"updated_at": "2026-01-12T18:30:45" // 东八区时间
}
无
如果需要回滚:
cd /opt/dataops-platform
git reset --hard HEAD~1
sudo supervisorctl restart dataops-platform
部署后请验证以下功能:
created_at 是否为东八区当前时间updated_at 和 processed_atlast_viewed_at 更新遇到问题?运行快速修复脚本:
cd /opt/dataops-platform/scripts
sudo ./fix_startup.sh
运行诊断脚本获取详细信息:
cd /opt/dataops-platform/scripts
sudo ./diagnose_issue.sh
# 最重要的日志
sudo tail -f /var/log/supervisor/dataops-platform-stderr.log
QUICK_FIX.mdDEPLOYMENT_GUIDE.mdPYTHON38_COMPATIBILITY.mdscripts/TROUBLESHOOTING.mddocs/timezone_fix_summary.md发布人: AI Assistant
发布日期: 2026-01-12
文档版本: 1.0