导出日期显示为 UTC

Date exported is displayed as UTC

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

我尝试使用 to_excel,但它只输出转换为 excel 内部浮点格式的日期时间。此外,这也被解释为浮点数,而不是日期时间。当格式化为日期时间时,它仍然是 UTC

我也尝试使用 Django 的 django.utils.timezone.localtime,但日期还是以 UTC 呈现。

我可以从我的日期中减去时区偏移量,但我觉得我更有可能在这里遗漏了一些东西。

如何导出日期时间数据,以便 Excel 以我当地的时区显示它?

Excel 本身没有时区的概念,总是天真地日期和时间。在这种情况下,唯一明智的做法是转换为 UTC,这正是 openpyxl 所做的。 openpyxl.utils.datetime 是要查看的模块

我最终使用了 javascript 和服务器端处理的组合:

在客户端 HTML 我为用户的本地时区创建了一个输入:

<input type="hidden" value="" name="tz" id="xls-tz"/>

并填充其值(使用 jQuery):

$("#xls-tz").val(new Date().getTimezoneOffset());

在服务器上,我解析时区偏移并相应地写入 openpyxl:

tz_offs = int(request.GET.get("tz", "0"))
ws.cell(row=row, column=2, value=item.time - timedelta(minutes=tz_offs))

IMO 非常接近我的需要。

感谢查理关于 Excel 不了解 TZ 的提示。

我遇到了类似的问题,并通过以下方式解决了。 可能有帮助。

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