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

如何修正openpyxl中带时区日期显示为UTC时间的2小时偏差问题

解决方案

问题根源在于你操作的date_recorded是UTC时区的datetime对象,Django REST Framework和Admin会自动根据配置的TIME_ZONE = 'Europe/Paris'做时区转换,但直接调用strftime或打印时,会使用UTC时间展示,导致写入Excel的时间比巴黎时间晚2小时。

你可以通过以下两种方式修正:

1. 转换时区后格式化字符串写入

利用Django自带的时区工具将UTC时间转换为巴黎时区,再格式化输出:

from django.utils import timezone

# 将UTC时间转换为Europe/Paris时区的时间对象
paris_datetime = timezone.localtime(date_recorded)
# 格式化后写入Excel
sheet.append([paris_datetime.strftime("%d/%m/%Y %H:%M:%S")])

2. 直接写入datetime对象(推荐)

openpyxl支持直接写入带时区的datetime对象,Excel会识别为日期类型,还能自定义显示格式:

from django.utils import timezone
from openpyxl.styles import numbers

# 转换为巴黎时区时间
paris_datetime = timezone.localtime(date_recorded)
# 写入Excel
sheet.append([paris_datetime])
# 设置单元格日期显示格式
target_cell = sheet.cell(row=sheet.max_row, column=1)
target_cell.number_format = 'DD/MM/YYYY HH:MM:SS'

关键说明

  • 确保Django配置中USE_TZ = True且TIME_ZONE = 'Europe/Paris'(你已满足该条件,因为DRF和Admin显示正常);
  • timezone.localtime()会自动读取Django的时区设置,无需手动指定Europe/Paris,避免硬编码错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:09:20