我正在通过一个API访问一些数据,在这里我需要为我的请求提供日期范围,例如start='20100101',end='20150415'。我想我可以通过将日期范围分解成不重叠的间隔来加快速度,并在每个间隔上使用多处理。
我的问题是,我如何打破日期范围并没有始终给我预期的结果。以下是我所做的:
from datetime import date
begin = '20100101'
end = '20101231'
假设我们想把它分成几个部分。首先,我将字符串改为日期:
def get_yyyy_mm_dd(yyyymmdd):
# given string 'yyyymmdd' return (yyyy, mm, dd)
year = yyyymmdd[0:4]
month = yyyymmdd[4:6]
day = yyyymmdd[6:]
return int(year), int(month), int(day)
y1, m1, d1 = get_yyyy_mm_dd(begin)
d1 = date(y1, m1, d1)
y2, m2, d2 = get_yyyy_mm_dd(end)
d2 = date(y2, m2, d2)
然后将此范围划分为子间隔:
def remove_tack(dates_list):
# given a list of dates in form YYYY-MM-DD return a list of strings in form 'YYYYMMDD'
tackless = []
for d in dates_list:
s = str(d)
tackless.append(s[0:4]+s[5:7]+s[8:])
return tackless
def divide_date(date1, date2, intervals):
dates = [date1]
for i in range(0, intervals):
dates.append(dates[i] + (date2 - date1)/intervals)
return remove_tack(dates)
使用上面的开始和结束,我们得到:
listdates = divide_date(d1, d2, 4)
print listdates # ['20100101', '20100402', '20100702', '20101001', '20101231'] looks correct
但如果我使用日期:
begin = '20150101'
end = '20150228'
。。。
listdates = divide_date(d1, d2, 4)
print listdates # ['20150101', '20150115', '20150129', '20150212', '20150226']
我在二月底失踪了两天。我的应用程序不需要时间或时区,也不介意安装另一个库。
实际上,我会采用不同的方法,依赖于timedelta和date addition来确定不重叠的范围
实施
执行
您可以改用datetime.date对象吗?
如果你这样做了:
日期列表应该包含每个时间段的结束日期。
你应该把日期改为日期时间
结果:
相关问题 更多 >
编程相关推荐