导出日期显示为 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
我正在尝试使用 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