[PYTHON] datetime을 하루 만에 늘리는 방법은 무엇입니까?
PYTHONdatetime을 하루 만에 늘리는 방법은 무엇입니까?
datetime의 날짜를 늘리는 방법은 무엇입니까?
for i in range(1, 35)
date = datetime.datetime(2003, 8, i)
print(date)
하지만 몇 개월에서 몇 년을 올바르게 통과해야합니까? 어떤 아이디어?
해결법
-
==============================
1.
date = datetime.datetime(2003,8,1,12,4,5) for i in range(5): date += datetime.timedelta(days=1) print(date)
-
==============================
2.timedelta 객체를 사용하여 날짜를 증가시킬 수 있습니다.
timedelta 객체를 사용하여 날짜를 증가시킬 수 있습니다.
import datetime datetime.datetime.now() + datetime.timedelta(days=1)
Python 문서에서 timedelta 객체를 찾습니다. http://docs.python.org/library/datetime.html
-
==============================
3.dateutil의 relativedelta를 사용하여 날짜를 추가하는 다른 방법은 다음과 같습니다.
dateutil의 relativedelta를 사용하여 날짜를 추가하는 다른 방법은 다음과 같습니다.
from datetime import datetime from dateutil.relativedelta import relativedelta print 'Today: ',datetime.now().strftime('%d/%m/%Y %H:%M:%S') date_after_month = datetime.now()+ relativedelta(day=1) print 'After a Days:', date_after_month.strftime('%d/%m/%Y %H:%M:%S')
산출:
-
==============================
4.시간대가 UTC를 기준으로 오프셋을 변경한다고 생각하지 않기 때문에 모든 현재 답변이 잘못된 경우가 있습니다. 따라서 24 시간을 추가하는 것이 달력을 추가하는 것과는 다른 경우도 있습니다.
시간대가 UTC를 기준으로 오프셋을 변경한다고 생각하지 않기 때문에 모든 현재 답변이 잘못된 경우가 있습니다. 따라서 24 시간을 추가하는 것이 달력을 추가하는 것과는 다른 경우도 있습니다.
다음 솔루션은 사모아에서 작동하며 현지 시간 상수를 유지합니다.
def add_day(today): """ Add a day to the current day. This takes care of historic offset changes and DST. Parameters ---------- today : timezone-aware datetime object Returns ------- tomorrow : timezone-aware datetime object """ today_utc = today.astimezone(datetime.timezone.utc) tz = today.tzinfo tomorrow_utc = today_utc + datetime.timedelta(days=1) tomorrow_utc_tz = tomorrow_utc.astimezone(tz) tomorrow_utc_tz = tomorrow_utc_tz.replace(hour=today.hour, minute=today.minute, second=today.second) return tomorrow_utc_tz
# core modules import datetime # 3rd party modules import pytz # add_day methods def add_day(today): """ Add a day to the current day. This takes care of historic offset changes and DST. Parameters ---------- today : timezone-aware datetime object Returns ------- tomorrow : timezone-aware datetime object """ today_utc = today.astimezone(datetime.timezone.utc) tz = today.tzinfo tomorrow_utc = today_utc + datetime.timedelta(days=1) tomorrow_utc_tz = tomorrow_utc.astimezone(tz) tomorrow_utc_tz = tomorrow_utc_tz.replace(hour=today.hour, minute=today.minute, second=today.second) return tomorrow_utc_tz def add_day_datetime_timedelta_conversion(today): # Correct for Samoa, but dst shift today_utc = today.astimezone(datetime.timezone.utc) tz = today.tzinfo tomorrow_utc = today_utc + datetime.timedelta(days=1) tomorrow_utc_tz = tomorrow_utc.astimezone(tz) return tomorrow_utc_tz def add_day_dateutil_relativedelta(today): # WRONG! from dateutil.relativedelta import relativedelta return today + relativedelta(days=1) def add_day_datetime_timedelta(today): # WRONG! return today + datetime.timedelta(days=1) # Test cases def test_samoa(add_day): """ Test if add_day properly increases the calendar day for Samoa. Due to economic considerations, Samoa went from 2011-12-30 10:00-11:00 to 2011-12-30 10:00+13:00. Hence the country skipped 2011-12-30 in its local time. See https://stackoverflow.com/q/52084423/562769 A common wrong result here is 2011-12-30T23:59:00-10:00. This date never happened in Samoa. """ tz = pytz.timezone('Pacific/Apia') today_utc = datetime.datetime(2011, 12, 30, 9, 59, tzinfo=datetime.timezone.utc) today_tz = today_utc.astimezone(tz) # 2011-12-29T23:59:00-10:00 tomorrow = add_day(today_tz) return tomorrow.isoformat() == '2011-12-31T23:59:00+14:00' def test_dst(add_day): """Test if add_day properly increases the calendar day if DST happens.""" tz = pytz.timezone('Europe/Berlin') today_utc = datetime.datetime(2018, 3, 25, 0, 59, tzinfo=datetime.timezone.utc) today_tz = today_utc.astimezone(tz) # 2018-03-25T01:59:00+01:00 tomorrow = add_day(today_tz) return tomorrow.isoformat() == '2018-03-26T01:59:00+02:00' to_test = [(add_day_dateutil_relativedelta, 'relativedelta'), (add_day_datetime_timedelta, 'timedelta'), (add_day_datetime_timedelta_conversion, 'timedelta+conversion'), (add_day, 'timedelta+conversion+dst')] print('{:<25}: {:>5} {:>5}'.format('Method', 'Samoa', 'DST')) for method, name in to_test: print('{:<25}: {:>5} {:>5}' .format(name, test_samoa(method), test_dst(method)))
Method : Samoa DST relativedelta : 0 0 timedelta : 0 0 timedelta+conversion : 1 0 timedelta+conversion+dst : 1 1
from https://stackoverflow.com/questions/3240458/how-to-increment-a-datetime-by-one-day by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 함수가 오버라이드되는 것을 막는 법 (0) | 2018.11.06 |
---|---|
[PYTHON] Python - 데이터 프레임에 행을 추가하는 효율적인 방법 (0) | 2018.11.06 |
[PYTHON] PIL에서 사용하도록 POST에서 base64 디코딩 (0) | 2018.11.06 |
[PYTHON] pip 설치 PIL-E TICKETS-1 - JPEG / PNG 지원 안 함 (0) | 2018.11.06 |
[PYTHON] 파이썬 : 클래스 이름을 함수의 매개 변수로 전달 하시겠습니까? (0) | 2018.11.06 |