2016-05-31 84 views
0

我試圖使用openpyxl將一些數據從Django導出到Excel。 導出的日期時間在Excel中被正確解釋爲如此,但是他們的打印輸出是UTC,而不是本地時區(本例中爲CET),正如我所期望的那樣。導出日期顯示爲UTC

我試圖使用to_excel,但只輸出日期時間轉換爲Excel的內部浮動格式。另外還將其解釋爲float,而不是datetime。當格式化爲日期時間,它仍然在UTC

我也嘗試使用Django的django.utils.timezone.localtime,但日期再次以UTC格式呈現。

我可以從我的日期中減去時區偏移量,但我覺得這很可能是我在這裏丟失了一些東西。

如何導出日期時間數據,以便Excel將它顯示在我的本地時區中?

回答

1

Excel本身沒有時區的概念,並且總是天真的日期和時間。在這種情況下,唯一可行的做法是轉換爲UTC,這就是openpyxl所做的。 openpyxl.utils.datetime是看,如果你想改變這個

+0

但我確實看過它,似乎沒有一個簡單的方法來改變TZ。 UTC作爲一個時區被定義,但粗糙的東西不止於此。 – velis

+0

一切都轉換爲UTC,這是Excel獲得的。所以如果你有12點CEST,這將變成格林威治時間10點。無論是猴子修補代碼還是,最好在將值傳遞給openpyxl之前進行任何處理。 –

+0

是的,後者是我現在做的 – velis

0

我結束了使用javascript &服務器端處理的組合的模塊:

在客戶端的HTML我的用戶創建的本地時區輸入:

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

和填充(使用jQuery)它的值:

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

在服務器上,我解析時區offse牛逼&寫入相應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的暗示。