2016-05-31 2 views
0

Я пытаюсь экспортировать некоторые данные из Django в Excel с помощью openpyxl. Экспортированные даты корректно интерпретируются как таковые в Excel, но их распечатка выполняется в формате UTC, а не в локальном часовом поясе (CET в этом случае), как я ожидал.Дата экспорта отображается как UTC

Я попытался использовать to_excel, но только выходные данные преобразуются во внутренний формат форматирования Excel. Кроме того, это интерпретируется как float, а не datetime. При форматировании как datetime он все еще находится в UTC

Я также пытался использовать Django's django.utils.timezone.localtime, но опять же даты отображаются в UTC.

Я мог бы просто вычесть смещение часовой пояс от моих дат, но я чувствую, что, скорее всего, я чего-то не хватает.

Как экспортировать данные о времени и времени, чтобы Excel отображал его в моем локальном часовом поясе?

ответ

1

Сам Excel не имеет понятия о часовых поясах и всегда будет наименованиями и временами. В этом контексте единственное, что нужно сделать, это конвертировать в UTC, что и делает openpyxl. openpyxl.utils.datetime является модулем смотреть, если вы хотите изменить это

+0

Но я смотрел на него, и, похоже, нет прямого способа изменить TZ. UTC как часовой пояс определен, но немного больше. – velis

+0

Все конвертируется в UTC, что и Excel. Поэтому, если у вас есть 12:00 CEST, это станет 10:00 GMT. Либо вы, обезьяна, исправляете код или, и это предпочтительнее, выполните любую обработку, прежде чем передать значение openpyxl. –

+0

Да, последнее, что я сейчас делаю – velis

0

я в конечном итоге, используя комбинацию яваскрипта обработки & стороны сервера:

На клиенте 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.

Смежные вопросы