2013-10-09 2 views
3

Предположим, у меня есть дата начала datetime(2007, 2, 15).Переход по дате в Python

Я хочу изменить эту дату в цикле, чтобы он продвигался до 1-го и 15-го числа каждого месяца.

Таким образом, datetime(2007, 2, 15) будет действовать на datetime(2007, 3, 1).

На следующей итерации он будет действовать на datetime(2007, 3, 15) ... затем до datetime(2007, 4, 1) и так далее.

Есть ли какой-либо возможный способ сделать это с помощью timedelta или dateutils, учитывая, что количество дней, которое необходимо выполнить, непрерывно изменяется?

ответ

2
from datetime import datetime 
for m in range(1, 13): 
    for d in (1, 15): 
     print str(datetime(2013, m, d)) 

2013-01-01 00:00:00 
2013-01-15 00:00:00 
2013-02-01 00:00:00 
2013-02-15 00:00:00 
2013-03-01 00:00:00 
2013-03-15 00:00:00 
2013-04-01 00:00:00 
2013-04-15 00:00:00 
2013-05-01 00:00:00 
2013-05-15 00:00:00 
2013-06-01 00:00:00 
2013-06-15 00:00:00 
2013-07-01 00:00:00 
2013-07-15 00:00:00 
2013-08-01 00:00:00 
2013-08-15 00:00:00 
2013-09-01 00:00:00 
2013-09-15 00:00:00 
2013-10-01 00:00:00 
2013-10-15 00:00:00 
2013-11-01 00:00:00 
2013-11-15 00:00:00 
2013-12-01 00:00:00 
2013-12-15 00:00:00 

Я стараюсь работать с datetime больше, чем объекты даты, но вы можете использовать datetime.date в зависимости от ваших потребностей.

1

я перебирать каждый день и игнорировать любую дату, когда день месяца не является 1 или 15. Пример:

import datetime 

current_time = datetime.datetime(2007,2,15) 
end_time = datetime.datetime(2008,4,1) 

while current_time <= end_time: 
    if current_time.day in [1,15]: 
    print(current_time) 
    current_time += datetime.timedelta(days=1) 

Таким образом, вы можете перебирать через несколько лет и начать на 15-й, оба из которых были бы проблематичны с решением doog.

0
from datetime import datetime  
d = datetime(month=2,year=2007,day=15)  
current_day = next_day = d.day 
current_month = next_month = d.month 
current_year = next_year = d.year 
for i in range(25): 
    if current_day == 1: 
     next_day = 15 
    elif current_day == 15: 
     next_day = 1 
     if current_month == 12: 
      next_month = 1 
      next_year+=1 
     else: 
      next_month+=1  
    new_date=datetime(month=next_month,year=next_year,day=next_day) 
    print new_date 
    current_day,current_month,current_year=next_day,next_month,next_year 

2007-03-01 00:00:00 
2007-03-15 00:00:00 
2007-04-01 00:00:00 
2007-04-15 00:00:00 
2007-05-01 00:00:00 
2007-05-15 00:00:00 
2007-06-01 00:00:00 
2007-06-15 00:00:00 
2007-07-01 00:00:00 
2007-07-15 00:00:00 
2007-08-01 00:00:00 
2007-08-15 00:00:00 
2007-09-01 00:00:00 
2007-09-15 00:00:00 
2007-10-01 00:00:00 
2007-10-15 00:00:00 
2007-11-01 00:00:00 
2007-11-15 00:00:00 
2007-12-01 00:00:00 
2007-12-15 00:00:00 
2008-01-01 00:00:00 
2008-01-15 00:00:00 
2008-02-01 00:00:00 
2008-02-15 00:00:00 
2008-03-01 00:00:00 
Смежные вопросы