2012-08-09 106 views
3

我想添加秒的python日期时间,不包括周末使用熊猫。下面的代码工作,但我想知道是否有一个更简单的方法来实现这一点。添加秒到蟒蛇日期时间,不包括周末

import datetime 
from pandas import * 
from pandas.tseries.offsets import * 

def add_seconds(start_date, offset_in_seconds): 
# get input date in datetime 
d = datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S') 

# get days, hours, mins, secs 
    no_of_days, remainder = divmod(offset_in_seconds, 86400) 
    hours, minutes = divmod(remainder, 3600) 
    minutes, seconds = divmod(minutes, 60) 

# increment the input date to the appropriate business day 
    end_date_pre = d + no_of_days*BDay() 

# dial back to previous evening if hour is under 24 
    if 16 + hours < 24: 
    end_date = end_date_pre 
    new_end_date = datetime(end_date.year, end_date.month, end_date.day, 16, 0, 0) 
    return start_date, end_date, new_end_date.strftime('%Y-%m-%d %H:%M:%S') 
# dial forward to the next business day if hour exceeds 24 
    elif 16 + hours >= 24: 
    end_date = end_date_pre + 1*BDay() 
    new_end_date = datetime(end_date.year, end_date.month, end_date.day,9, 0, 0) 
    return start_date, end_date, new_end_date.strftime('%Y-%m-%d %H:%M:%S') 
    else: 
    return start_date, end_date, end_date.strftime('%Y-%m-%d %H:%M:%S') 
+1

欢迎来到StackOverflow! :) – 2012-08-09 16:16:05

回答

3

dateutil包应该是有用的,例如,

from dateutil.rrule import *  

def add_weekday_seconds(start, x): 
    rr = rrule(SECONDLY, byweekday=(MO, TU, WE, TH, FR), dtstart=start, interval=x) 
    return rr.after(start) 

这(1)采用rrule类来创建一个“重复日期规则”,其中包括内周一所有秒至周五开始上start(这是一个datetime),每x秒跳过;然后(2)使用after方法执行此规则,该方法在开始时间之后返回与规则匹配的第一个日期时间 - 应该是您的答案!

周五晚上午夜前10秒开始时间增加5,10和15秒的测试,分别在周五午夜前的5秒,周一上午的午夜前的5秒以及周一上午的午夜后的5秒后的测试:

In [131]: friday_night = datetime.datetime(2012, 8, 10, 23, 59, 50) 

In [132]: add_weekday_seconds(friday_night, 5) 
Out[132]: datetime.datetime(2012, 8, 10, 23, 59, 55) 

In [133]: add_weekday_seconds(friday_night, 10) 
Out[133]: datetime.datetime(2012, 8, 13, 0, 0) 

In [134]: add_weekday_seconds(friday_night, 15) 
Out[134]: datetime.datetime(2012, 8, 13, 0, 0, 5) 
+0

不错,我从来不知道这件事......没有看清楚它,但很酷的伎俩 – 2012-08-09 18:43:18

相关问题