我正在尝试使用openpyxl将一些数据从Django导出到Excel。 导出的日期时间在Excel中正确解释,但它们的打印输出是UTC,而不是本地时区(在本例中为CET),正如我所期望的那样。
我尝试使用to_excel,但只输出转换为excel内部浮点格式的日期时间。另外还解释为float,而不是datetime。格式化为datetime时,它仍然是UTC
我也尝试使用Django的django.utils.timezone.localtime
,但日期再次以UTC格式呈现。
我可以从我的约会中减去时区偏移量,但我觉得我在这里错过了一些东西。
如何导出日期时间数据,以便Excel将其显示在我的本地时区?
答案 0 :(得分:1)
Excel本身没有时区概念,总是天真地和日期。在这种情况下,唯一明智的做法是转换为UTC,这是openpyxl所做的。如果您想要更改此
,openpyxl.utils.datetime
是要查看的模块
答案 1 :(得分:0)
我最终使用了javascript和amp;组合服务器端处理:
在客户端HTML我为用户的本地时区创建输入:
<input type="hidden" value="" name="tz" id="xls-tz"/>
并填充其值(使用jQuery):
$("#xls-tz").val(new Date().getTimezoneOffset());
在服务器上,我解析时区偏移量&amp;写相应的openpyxl:
tz_offs = int(request.GET.get("tz", "0"))
ws.cell(row=row, column=2, value=item.time - timedelta(minutes=tz_offs))
IMO非常接近我的需要。
感谢Charlie关于Excel不能识别TZ的提示。
答案 2 :(得分:0)
我有类似的问题,并通过以下方式解决了。 可能有帮助。
from dateutil.tz import tzutc, tzlocal
TZ_UTC = tzutc() # UTC timezone
TZ_LOCAL = tzlocal() # Local timezone
datevalue = value #value I get from API I am using, which is datetime object.
# For some reason I don't get tzinfo filled).
datevalue = datevalue.replace(tzinfo=TZ_UTC) # Adding time zone info for UTC
datevalue = datevalue.astimezone(TZ_LOCAL) # Converting to local timezone
datevalue = datevalue.replace(tzinfo=None) # Removing tzinfo to correctly record local time to Excel
cell.value = datevalue