На GAE, как я могу показать дату по словам правильного клиента TimeZone?

Вы должны использовать CustomBusinessHour и pd.date_range вместо pd.bdate_range.

Количество часов для вашего второго ряда должно быть 145, потому что конечное время равно 09:31:39.967.

us_bh = CustomBusinessHour(calendar=USFederalHolidayCalendar())
df['count'] = df.apply(lambda x: len(pd.date_range(start=x.start, end=x.end, freq= us_bh)),axis=1)
df['diff'] = df.apply(lambda x: pd.date_range(start=x.start, end=x.end, freq= us_bh),axis=1)
print(df)


    start                     end                  count                                               diff
0 2018-10-29 18:48:46.697 2018-10-31 17:56:38.830     16  DatetimeIndex(['2018-10-30 09:00:00', '2018-10...
1 2018-10-29 19:01:10.887 2018-11-27 09:31:39.967    145  DatetimeIndex(['2018-10-30 09:00:00', '2018-10...
2 2018-10-22 17:42:24.467 2018-11-28 18:33:35.243    200  DatetimeIndex(['2018-10-23 09:00:00', '2018-10...

И diff столбцы начала рабочего часа будут '2018-10-29 09:00:00' при использовании pd.bdate_range.

us_bh = CustomBusinessHour(calendar=USFederalHolidayCalendar())
df['count'] = df.apply(lambda x: len(pd.bdate_range(start=x.start, end=x.end, freq= us_bh)),axis=1)
df['diff'] = df.apply(lambda x: pd.bdate_range(start=x.start, end=x.end, freq= us_bh),axis=1)
print(df)

                    start                     end  count                                               diff
0 2018-10-29 18:48:46.697 2018-10-31 17:56:38.830     16  DatetimeIndex(['2018-10-29 09:00:00', '2018-10...
1 2018-10-29 19:01:10.887 2018-11-27 09:31:39.967    152  DatetimeIndex(['2018-10-29 09:00:00', '2018-10...
2 2018-10-22 17:42:24.467 2018-11-28 18:33:35.243    200  DatetimeIndex(['2018-10-22 09:00:00', '2018-10...
5
задан kcwu 15 May 2009 в 13:42
поделиться

3 ответа

Что касается второй части вашего вопроса:

Python time () возвращает UTC независимо от того, в каком часовом поясе находится сервер. Timezone () и tzname () предоставят вам, соответственно, смещение к местному времени на сервере и имя часового пояса и часового пояса DST в виде кортежа. На момент публикации GAE использует Python 2.5.x; см. документацию по функциям времени Python здесь .

Для первой части вопроса:

Вы можете форматировать дату с помощью кода на сервере или с помощью кода на клиенте.

  • Если вы выполняете форматирование на сервере, вы можете

    • Использовать часовой пояс IP-адреса запрашивающей стороны
    • Требовать от пользователя регистрации и предоставления вам часового пояса, сохранять его и использовать сохраненное значение
    • Использовать (скрыто?) в GET или POST, чтобы клиент ' желаемый часовой пояс является частью запроса
  • Если вы выполняете форматирование на клиенте, вам нужно написать несколько строк JavaScript. Процедура похожа на «сделайте дату из UTC, используя Date (utctime), а затем вставьте ее в документ». По умолчанию даты JavaScript отображаются как местное время независимо от того, как они были инициализированы - отлично!

Я рекомендую выполнять форматирование на клиенте, потому что на что похожа веб-страница без небольшого количества JavaScript? 2009 год! Марсело приводит несколько примеров.

Я рекомендую выполнять форматирование на клиенте, потому что на что похожа веб-страница без небольшого количества JavaScript? 2009 год! Марсело приводит несколько примеров.

Я рекомендую выполнять форматирование на клиенте, потому что на что похожа веб-страница без небольшого количества JavaScript? 2009 год! Марсело приводит несколько примеров.

5
ответ дан 14 December 2019 в 04:47
поделиться

Вы можете узнать часовой пояс сервера, запросив местное время и время в формате UTC и посмотрев, в чем разница. Чтобы узнать часовой пояс клиента, вам необходимо иметь в своем шаблоне немного Javascript, который сообщит вам, например, при обмене AJAX. Чтобы управлять часовыми поясами после того, как вы обнаружили дельты, я предлагаю pytz, pytz.sourceforge.net/.

1
ответ дан 14 December 2019 в 04:47
поделиться

Итак, спасибо Томасу Л. Холадею, я должен отправить эту дату в формате UTC клиенту, например, используя JSON:

json = '{"serverUTCDate":new Date("%s")}' % date.ctime()

А затем на стороне клиента добавить / удалить количество секунд в соответствии с часовым поясом пользователя, например:

var localDate = serverUTCDate.getTime() - (new Date()).getTimezoneOffset()*60000;
2
ответ дан 14 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: