며칠, 몇 시간, 몇 주 및 몇 달 후에 시간 범위를 반복하는 방법은 무엇입니까?
며칠, 몇 시간, 몇 주 또는 몇 달 후에 시간 범위를 어떻게 반복합니까?
다음과 같은 것 :
for date in foo(from_date, to_date, delta=HOURS):
print date
여기서 foo는 함수이며 반복자를 반환합니다. 달력 모듈을 살펴 보았지만 날짜 사이가 아닌 특정 연도 또는 월에만 작동합니다.
다음 과 같이 dateutil 및 해당 rrule 구현을 사용합니다 .
from dateutil import rrule
from datetime import datetime, timedelta
now = datetime.now()
hundredDaysLater = now + timedelta(days=100)
for dt in rrule.rrule(rrule.MONTHLY, dtstart=now, until=hundredDaysLater):
print dt
출력은
2008-09-30 23:29:54
2008-10-30 23:29:54
2008-11-30 23:29:54
2008-12-30 23:29:54
MONTHLY를 YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY 또는 SECONDLY로 바꿉니다. dtstart 및 until을 원하는 datetime 객체로 바꾸십시오.
이 레시피는 MONTHLY를 포함한 모든 경우에 작업 할 수있는 이점이 있습니다. 내가 찾을 수있는 유일한주의 사항은 모든 달에 존재하지 않는 일 번호를 전달하면 해당 달을 건너 뛴다는 것입니다.
파이썬 라이브러리에 메서드가 있다고 생각하지 않지만 datetime 모듈을 사용하여 쉽게 만들 수 있습니다 .
from datetime import date, datetime, timedelta
def datespan(startDate, endDate, delta=timedelta(days=1)):
currentDate = startDate
while currentDate < endDate:
yield currentDate
currentDate += delta
그런 다음 다음과 같이 사용할 수 있습니다.
>>> for day in datespan(date(2007, 3, 30), date(2007, 4, 3),
>>> delta=timedelta(days=1)):
>>> print day
2007-03-30
2007-03-31
2007-04-01
2007-04-02
또는 델타를 더 작게 만들고 싶은 경우 :
>>> for timestamp in datespan(datetime(2007, 3, 30, 15, 30),
>>> datetime(2007, 3, 30, 18, 35),
>>> delta=timedelta(hours=1)):
>>> print timestamp
2007-03-30 15:30:00
2007-03-30 16:30:00
2007-03-30 17:30:00
2007-03-30 18:30:00
몇 달에 걸쳐 반복하려면 timedeltas가 "1 개월"을 표현할 수 없기 때문에 다른 레시피가 필요합니다.
from datetime import date
def jump_by_month(start_date, end_date, month_step=1):
current_date = start_date
while current_date < end_date:
yield current_date
carry, new_month = divmod(current_date.month - 1 + month_step, 12)
new_month += 1
current_date = current_date.replace(year=current_date.year + carry,
month=new_month)
(주의 : s의 new_month
개월이 1에서 datetime.date
시작 하기 때문에 모듈러스 연산을 위해 월에서 1을 뺀 다음에 다시 추가해야합니다 .)
다음과 같이 pandas 및 datetime 라이브러리를 사용하여 이것을 달성했습니다. 저에게는 훨씬 더 편리했습니다.
import pandas as pd
from datetime import datetime
DATE_TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
start_datetime = datetime.strptime('2018-05-18 00:00:00', DATE_TIME_FORMAT)
end_datetime = datetime.strptime('2018-05-23 13:00:00', DATE_TIME_FORMAT)
timedelta_index = pd.date_range(start=start_datetime, end=end_datetime, freq='H').to_series()
for index, value in timedelta_index.iteritems():
dt = index.to_pydatetime()
print(dt)
월 반복 접근 방식 :
def months_between(date_start, date_end):
months = []
# Make sure start_date is smaller than end_date
if date_start > date_end:
tmp = date_start
date_start = date_end
date_end = tmp
tmp_date = date_start
while tmp_date.month <= date_end.month or tmp_date.year < date_end.year:
months.append(tmp_date) # Here you could do for example: months.append(datetime.datetime.strftime(tmp_date, "%b '%y"))
if tmp_date.month == 12: # New year
tmp_date = datetime.date(tmp_date.year + 1, 1, 1)
else:
tmp_date = datetime.date(tmp_date.year, tmp_date.month + 1, 1)
return months
더 많은 코드이지만 주어진 날짜가 올바른지 확인하는 오랜 시간을 잘 처리합니다 ...
이 라이브러리는 편리한 캘린더 도구를 제공합니다 : mxDateTime , 충분해야합니다 :)
You should modify this line to make this work correctly:
current_date = current_date.replace(year=current_date.year + carry,month=new_month,day=1)
;)
'Nice programing' 카테고리의 다른 글
Android 알림에 대한 addAction 클릭 결정 (0) | 2020.12.03 |
---|---|
Android의 Firebase에서 알림을 보낼 때 알림 소리가 나지 않습니다. (0) | 2020.12.03 |
지정된 div 내의 링크에 target =“_ blank”를 어떻게 추가합니까? (0) | 2020.12.02 |
존재하지 않는 경우 폴더를 생성하는 Powershell 2 복사 항목 (0) | 2020.12.02 |
DEXtoJar 사용 방법 (0) | 2020.12.02 |