如何修正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
相关产品推荐
相关产品推荐

