Вы должны использовать 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...
Что касается второй части вашего вопроса:
Python time () возвращает UTC независимо от того, в каком часовом поясе находится сервер. Timezone () и tzname () предоставят вам, соответственно, смещение к местному времени на сервере и имя часового пояса и часового пояса DST в виде кортежа. На момент публикации GAE использует Python 2.5.x; см. документацию по функциям времени Python здесь .
Для первой части вопроса:
Вы можете форматировать дату с помощью кода на сервере или с помощью кода на клиенте.
Если вы выполняете форматирование на сервере, вы можете
Если вы выполняете форматирование на клиенте, вам нужно написать несколько строк JavaScript. Процедура похожа на «сделайте дату из UTC, используя Date (utctime), а затем вставьте ее в документ». По умолчанию даты JavaScript отображаются как местное время независимо от того, как они были инициализированы - отлично!
Я рекомендую выполнять форматирование на клиенте, потому что на что похожа веб-страница без небольшого количества JavaScript? 2009 год! Марсело приводит несколько примеров.
Я рекомендую выполнять форматирование на клиенте, потому что на что похожа веб-страница без небольшого количества JavaScript? 2009 год! Марсело приводит несколько примеров.
Я рекомендую выполнять форматирование на клиенте, потому что на что похожа веб-страница без небольшого количества JavaScript? 2009 год! Марсело приводит несколько примеров.
Вы можете узнать часовой пояс сервера, запросив местное время и время в формате UTC и посмотрев, в чем разница. Чтобы узнать часовой пояс клиента, вам необходимо иметь в своем шаблоне немного Javascript, который сообщит вам, например, при обмене AJAX. Чтобы управлять часовыми поясами после того, как вы обнаружили дельты, я предлагаю pytz, pytz.sourceforge.net/.
Итак, спасибо Томасу Л. Холадею, я должен отправить эту дату в формате UTC клиенту, например, используя JSON:
json = '{"serverUTCDate":new Date("%s")}' % date.ctime()
А затем на стороне клиента добавить / удалить количество секунд в соответствии с часовым поясом пользователя, например:
var localDate = serverUTCDate.getTime() - (new Date()).getTimezoneOffset()*60000;