导出日期显示为UTC

时间:2016-05-31 10:52:37

标签: django excel datetime openpyxl

我正在尝试使用openpyxl将一些数据从Django导出到Excel。 导出的日期时间在Excel中正确解释,但它们的打印输出是UTC,而不是本地时区(在本例中为CET),正如我所期望的那样。

我尝试使用to_excel,但只输出转换为excel内部浮点格式的日期时间。另外还解释为float,而不是datetime。格式化为datetime时,它仍然是UTC

我也尝试使用Django的django.utils.timezone.localtime,但日期再次以UTC格式呈现。

我可以从我的约会中减去时区偏移量,但我觉得我在这里错过了一些东西。

如何导出日期时间数据,以便Excel将其显示在我的本地时区?

3 个答案:

答案 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