Как добавить панду Timedelta в метку времени для конкретного рабочего и рабочего времени - PullRequest
1 голос
/ 08 ноября 2019

Я бы хотел добавить Timedelta, например, 6 часов 30 минут к метке времени. Результат должен учитывать только конкретное рабочее время, например, с 8:00 (время начала работы) до 16:00 (время окончания работы) для всех действительных рабочих дней. Когда я попробую это с помощью следующего кода, это закончится не в то время.

pd.Timedelta('06:30:00') + pd.Timestamp('2019-11-08 14:30:00')
Timestamp('2019-11-08 21:00:00')

Желаемый результат должен быть «2019-11-09 11:00:00», а не «2019-11-08 21: 00: 00»

Кто-нибудь знаетхорошее решение, как указать рабочие часы, чтобы я мог добавить Timedelta к метке времени, и результаты окажутся в нужном диапазоне рабочих часов?

Спасибо и наилучшими пожеланиями md5sum

1 Ответ

0 голосов
/ 08 ноября 2019
time_ini=pd.Timestamp('2019-11-08 14:30:00')
delta=pd.Timedelta('6:30:00')

def calculate_date(time,delta,ini,fin):
    Sum=time+delta
    if Sum.hour>fin:
        Sum= time + pd.Timedelta(days=1,hours=ini+Sum.hour-fin-time.hour-1,minutes=60-time.minute-1,seconds=60-time.second)
    elif Sum.hour <time.hour:
        Sum=time+pd.Timedelta(days=1,hours=ini+(24-fin)+Sum.hour-1-time.hour,minutes=60-time.minute-1,seconds=60-time.second)
    if Sum.dayofweek >4:
        Sum=Sum+pd.Timedelta(days=7-Sum.dayofweek)
    return Sum
calculate_date(time_ini,delta,10,20)

Ouput

Timestamp('2019-11-11 11:00:00')
...