파이썬에서 날짜에 5 일 추가


366

날짜가 "10/10/11(m-d-y)"있고 Python 스크립트를 사용하여 5 일을 추가하고 싶습니다. 월말에도 작동하는 일반적인 솔루션을 고려하십시오.

다음 코드를 사용하고 있습니다.

import re
from datetime import datetime

StartDate = "10/10/11"

Date = datetime.strptime(StartDate, "%m/%d/%y")

print Date -> 인쇄 중입니다 '2011-10-10 00:00:00'

이제이 날짜에 5 일을 추가하고 싶습니다. 다음 코드를 사용했습니다.

EndDate = Date.today()+timedelta(days=10)

이 오류를 반환 한 것 :

name 'timedelta' is not defined

12
일반적인 단서 : 오류가 발생 name 'timedelta' is not defined하면 timedelta아무 곳도 정의하지 않았다는 의미입니다 . 파이썬은 일반적으로 오류 메시지에 대해 매우 유익합니다.
Katriel

1
검색이 작동하지 않습니까? 이러한 모든 코드 예제는 stackoverflow.com/search?q=python+timedelta 도움이 될 것 입니다. 이 질문처럼 200 개가 넘는 질문이있는 것 같습니다.
S.Lott


9
5 일을 더하고 싶지만 timedelta (days = 10)… 10이 어디에서 왔으며 5가 아닌 이유에 대해 혼란스러워합니다
FeifanZ

답변:


556

이전 답변은 정확하지만 일반적으로 수행하는 것이 좋습니다.

import datetime

그런 다음 다음을 사용합니다 datetime.timedelta.

date_1 = datetime.datetime.strptime(start_date, "%m/%d/%y")

end_date = date_1 + datetime.timedelta(days=10)

7
datetime.datetime-왜 두 번입니까?
paulmorriss

59
"datetime import datetime, timedelta"와 같이 가져 오면 코드에 가독성이 추가됩니다
Manel Clos

8
@paulmorriss : 모듈 strptimedatetime클래스에서 메소드를 호출하므로을 datetime지정해야합니다 datetime.datetime.
Graeme Perrow

6
공통적으로 사용되는 클래스를 포함하는 모듈과 동일한 이름을 명명하는 것이 멍청한 아이디어라는 데 모두 동의 할 수 있습니까? 무엇입니까 datetime? 알기 위해 관례에 의존 할 수는 없지만 항상 수입품을 봐야합니다.
Xiong Chiamiov 2018 년

8
긴 꼬리 레거시 문제가 있습니다. from datetime import DateTime클래스가 CamelCased이기 때문에 " 필수 " 이지만 날짜 시간은 PEP8보다 우선합니다.
Aaron McMillin 2016 년

120

가져 오기 timedeltadate먼저.

from datetime import timedelta, date

그리고 date.today()오늘의 날짜를 반환합니다, 당신이 원하는 수 있습니다

EndDate = date.today() + timedelta(days=10)

11
Date.today () 대신 datetime.date.today ()
elsadek

2
@ dan-klasson 그것은 나를 위해 작동하지 않습니다, date객체에는 timedelta방법 이 없습니다 . 어떤 Python 버전을 사용하고 있습니까?
DrTyrsa

@DrTyrsa 내 나쁜. 해야합니다from datetime import timedelta, date; date.today() + timedelta(days=10)
단 - klasson

21

이미 pandas를 사용하고 있다면 형식을 지정하지 않으면 서 약간의 공간을 절약 할 수 있습니다.

import pandas as pd
startdate = "10/10/2011"
enddate = pd.to_datetime(startdate) + pd.DateOffset(days=5)

나를 위해 잘 작동했습니다. 고마워
renny

12

나는 당신이 그런 것을 놓친 것 같아요 :

from datetime import timedelta

12

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(days=5)
print 'After 5 Days:', date_after_month.strftime('%d/%m/%Y %H:%M:%S')

산출:

오늘 : 25/06/2015 15:56:09

5 일 후 : 30/06/2015 15:56:09


10

지금 날짜를 추가하려면이 코드를 사용할 수 있습니다

from datetime import datetime
from datetime import timedelta


date_now_more_5_days = (datetime.now() + timedelta(days=5) ).strftime('%Y-%m-%d')

9

다음은 지금부터 + 지정된 날부터 얻는 기능입니다.

import datetime

def get_date(dateFormat="%d-%m-%Y", addDays=0):

    timeNow = datetime.datetime.now()
    if (addDays!=0):
        anotherTime = timeNow + datetime.timedelta(days=addDays)
    else:
        anotherTime = timeNow

    return anotherTime.strftime(dateFormat)

용법:

addDays = 3 #days
output_format = '%d-%m-%Y'
output = get_date(output_format, addDays)
print output

1
좋은 코드입니다. 그러나 get_date에서 addDays를 테스트하기위한 IF는 필요하지 않습니다
Eduardo

6

이 가지고하기 위해 코드 자세한 덜 하고, 회피 이름 충돌 날짜와 datetime.datetime 사이를 , 당신과 클래스 이름을 변경해야 낙타 표기법의 이름.

from datetime import datetime as DateTime, timedelta as TimeDelta

그래서 당신은 다음을 할 수 있습니다.

date_1 = DateTime.today() 
end_date = date_1 + TimeDelta(days=10)

또한 나중에 원하는 경우 이름 충돌없습니다import datetime .


0

timedeltas를 사용 하면 다음을 수행 할 수 있습니다.

import datetime
today=datetime.date.today()


time=datetime.time()
print("today :",today)

# One day different .
five_day=datetime.timedelta(days=5)
print("one day :",five_day)
#output - 1 day , 00:00:00


# five day extend .
fitfthday=today+five_day
print("fitfthday",fitfthday)


# five day extend .
fitfthday=today+five_day
print("fitfthday",fitfthday)
#output - 
today : 2019-05-29
one day : 5 days, 0:00:00
fitfthday 2019-06-03

0

일반적으로 당신은 지금 대답을 얻었지만 어쩌면 내가 만든 수업이 도움이 될 것입니다. 나를 위해 그것은 Pyhon 프로젝트에서 내가 가진 모든 요구 사항을 해결합니다.

class GetDate:
    def __init__(self, date, format="%Y-%m-%d"):
        self.tz = pytz.timezone("Europe/Warsaw")

        if isinstance(date, str):
            date = datetime.strptime(date, format)

        self.date = date.astimezone(self.tz)

    def time_delta_days(self, days):
        return self.date + timedelta(days=days)

    def time_delta_hours(self, hours):
        return self.date + timedelta(hours=hours)

    def time_delta_seconds(self, seconds):
        return self.date + timedelta(seconds=seconds)

    def get_minimum_time(self):
        return datetime.combine(self.date, time.min).astimezone(self.tz)

    def get_maximum_time(self):
        return datetime.combine(self.date, time.max).astimezone(self.tz)

    def get_month_first_day(self):
        return datetime(self.date.year, self.date.month, 1).astimezone(self.tz)

    def current(self):
        return self.date

    def get_month_last_day(self):
        lastDay = calendar.monthrange(self.date.year, self.date.month)[1]
        date = datetime(self.date.year, self.date.month, lastDay)
        return datetime.combine(date, time.max).astimezone(self.tz)

사용 방법

  1. self.tz = pytz.timezone("Europe/Warsaw") -여기에서 프로젝트에 사용하려는 시간대를 정의합니다
  2. GetDate("2019-08-08").current()-이것은 pt 1에서 정의한 시간대를 사용하여 문자열 날짜를 시간 인식 객체로 변환합니다. 기본 문자열 형식은 format="%Y-%m-%d"자유롭게 변경하십시오. (예. GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current())
  3. GetDate("2019-08-08").get_month_first_day() 주어진 날짜 (문자열 또는 객체) 달 첫날을 반환
  4. GetDate("2019-08-08").get_month_last_day() 지난달 주어진 날짜 반환
  5. GetDate("2019-08-08").minimum_time() 주어진 날짜 일 시작을 반환
  6. GetDate("2019-08-08").maximum_time() 주어진 날짜 하루 종료를 반환
  7. GetDate("2019-08-08").time_delta_days({number_of_days})주어진 날짜 반환 + {일 수} 추가 ( GetDate(timezone.now()).time_delta_days(-1)어제 : 전화 )
  8. GetDate("2019-08-08").time_delta_haours({number_of_hours}) pt 7와 유사하지만 몇 시간 동안 작업
  9. GetDate("2019-08-08").time_delta_seconds({number_of_seconds}) pt 7과 유사하지만 몇 초 동안 작업

0

때때로 우리는 날짜와 날짜별로 검색을 사용해야합니다. date__range를 사용하면 to_date와 함께 1 일을 추가해야합니다. 그렇지 않으면 queryset이 ​​비게됩니다.

예:

날짜 / 시간 가져 오기에서 timedelta

from_date = parse_date (요청 .POST [ 'from_date'])

to_date = parse_date (request.POST [ 'to_date']) + timedelta (days = 1)

attendance_list = models.DailyAttendance.objects.filter (attdate__range = [시작 날짜, 종료 날짜])

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.