在python中找到给定日期的间隔

时间:2016-04-04 15:26:09

标签: python date datetime

我在python中遇到日期对象。

我有以下数据:

from datetime import datetime, timedelta 
# date retrieved from a list
ini =  [u'2016-01-01']
# transform the ini in a readable string
ini2 = ', '.join(map(str, ini))
# transform the string a date object
date_1 = datetime.strptime(ini2, "%Y-%m-%d")
# number that is the length of the date
l = 365.0
# adding l to ini2
final = date_1 + timedelta(days = l)

现在我需要将整个时间间隔(即从date_1final的时间段)按输入数字(例如ts = 4)拆分给另一个输入日期(例如new_date = u'2016-05-19')检查 interval (在5月19日的例子中是t2 = 2)。

我希望自己足够清楚。

由于 我尝试了不同的方法,但似乎都没有。

3 个答案:

答案 0 :(得分:2)

这可能会有所帮助:

from datetime import datetime, timedelta


def which_interval(date0, delta, date1, n_intervals):
    date0 = datetime.strptime(date0, '%Y-%m-%d')
    delta = timedelta(days = delta)
    date1 = datetime.strptime(date1, '%Y-%m-%d')
    delta1 = date1 - date0
    quadrile = int(((float(delta1.days) / delta.days) * n_intervals))
    return quadrile


# Example: figure out which quarter August 1st is in
interval = which_interval(
    '2016-01-01',
    366,
    '2016-08-01',
    4)
print '2016-08-01 is in interval %d, Q%d'%(interval, interval+1)

请注意,此函数使用python索引,因此它将从第0季度开始到第3季度结束。如果您想要基于1的索引(因此答案将为1,2,3或4),您可能需要添加1到结果。

答案 1 :(得分:0)

timedelta对象支持分区,因此请使用step的分区划分,您将获得range(ts)

的间隔
new_date = datetime.strptime(u'2016-05-19', "%Y-%m-%d")

ts = 4
step = timedelta(days=l)/ts #divide by the number of steps

interval = (new_date - date_1)//step #get the number this interval is in

所以date_1 <= new_date < date_1 + step间隔为0,date_1+step<=new_date < date_1 + step*2间隔为1,等等。

这当然是使用python样式索引,所以从1开始得到数字,加一:

 interval = (new_date - date_1)//step + 1
编辑:分割timedelta对象的功能只在python3中添加,你需要使用.total_seconds()方法在python 2中进行计算:

step = timedelta(days=l).total_seconds()/ts #divide by inteval

interval =  (new_date - date_1).total_seconds()//step

答案 2 :(得分:0)

您可以使用间隔的秒总数计算出来。

import math
from datetime import datetime, timedelta 

l = 365.0
factor = 4
date_1 = datetime.strptime('2016-01-01', "%Y-%m-%d")
lookup_dt = datetime.strptime('2016-12-01', "%Y-%m-%d")

def get_interval_num(factor, start_dt, td, lookup_dt):
    final = start_dt + td
    interval = (final - start_dt).total_seconds()
    subinterval = interval / factor
    interval_2 = (lookup_dt - start_dt).total_seconds()
    return int(math.ceil(interval_2 / subinterval))

num = get_interval_num(
    factor=factor,
    start_dt=date_1,
    td= timedelta(days=l),
    lookup_dt=lookup_dt
)
print("The interval number is: %s" % num)

输出将是:

The interval number is: 4

编辑:清除变量命名,扩展代码段