在Python中为日期添加天数

在Python中为日期添加天数,python,date,datetime,timedelta,Python,Date,Datetime,Timedelta,我有一个日期“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") EndDate = Date.today()+timedelta(days=10) 打印日期->正在打印'2011-10-10 0

我有一个日期
“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")
EndDate = Date.today()+timedelta(days=10)
打印日期
->正在打印
'2011-10-10 00:00:00'

现在我想给这个日期加上5天。我使用了以下代码:

import re
from datetime import datetime

StartDate = "10/10/11"

Date = datetime.strptime(StartDate, "%m/%d/%y")
EndDate = Date.today()+timedelta(days=10)
返回此错误的:

name 'timedelta' is not defined

首先导入
timedelta
date

from datetime import timedelta, date
date.today()
将返回今天的日期时间,可能是您想要的

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

我猜你错过了这样的东西:

从日期时间导入时间增量

前面的答案是正确的,但通常更好的做法是:

import datetime
然后,您可以使用:


如果您碰巧已经在使用,可以通过不指定格式来节省一点空间:

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

这是一个从现在开始+指定日期的函数

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

下面是另一种使用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


为了使代码不那么冗长,并避免datetime和datetime.datetime之间的名称冲突,应使用CamelCase名称重命名类

from datetime import datetime as DateTime, timedelta as TimeDelta
所以你可以做下面的事情,我认为这更清楚

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

此外,如果以后要导入日期时间,则会出现名称冲突。如果现在要添加日期,则可以使用此代码

from datetime import datetime
from datetime import timedelta


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

使用
timedelta
s,您可以执行以下操作:

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

一般来说,你现在已经得到了答案,但也许我创建的类也会有帮助。对我来说,它解决了我在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)
如何使用它

  • self.tz=pytz.timezone(“欧洲/华沙”)
    -这里定义了您希望在项目中使用的时区
  • GetDate(“2019-08-08”).current()
    -这将把字符串日期转换为时间感知对象,并在第1部分中定义时区。默认字符串格式为
    format=“%Y-%m-%d”
    ,但可以随意更改。(例如,
    GetDate(“2019-08-08 08:45”,格式=“%Y-%m-%d%H:%m”)。当前()
  • GetDate(“2019-08-08”)。获取月第一天()
    返回给定的日期(字符串或对象)月第一天
  • GetDate(“2019-08-08”)。获取月最后一天()
    返回给定的日期月最后一天
  • GetDate(“2019-08-08”)。最短时间()
    返回给定的开始日期
  • GetDate(“2019-08-08”)。最长时间()
    返回给定的日期日结束
  • GetDate(“2019-08-08”).time_delta_days({number_of_days})
    返回给定的日期并添加{number of days}(您也可以调用:
    GetDate(timezone.now()).time_delta_days(-1)
  • GetDate(“2019-08-08”)。时间增量({小时数})
    与第7部分类似,但工作时间为小时
  • GetDate(“2019-08-08”)。时间增量秒({秒数})
    与第7部分类似,但以秒为单位

  • 有时我们需要使用“从日期到日期”搜索。如果我们使用
    date\u范围
    ,则需要在
    日期
    中添加1天,否则queryset将为空

    例如:

    from datetime import timedelta  
    
    from_date  = parse_date(request.POST['from_date'])
    
    to_date    = parse_date(request.POST['to_date']) + timedelta(days=1)
    
    attendance_list = models.DailyAttendance.objects.filter(attdate__range = [from_date, to_date])
    
    这可能有助于:

    from datetime导入日期,timedelta
    date1=日期(2011年10月10日)
    date2=date1+timedelta(天数=5)
    打印(日期2)
    
    我已经看到了一个pandas示例,但这里有一个转折点,您可以直接导入Day类

    from pandas.tseries.offsets import Day
    
    date1 = datetime(2011, 10, 10)
    date2 = date1 + 5 * Day()
    
    试试这个:

    将5天添加到当前日期。 从当前日期减去5天。
    一般提示:如果出现错误
    名称“timedelta”未定义
    ,则表示您尚未在任何地方定义
    timedelta
    。Python的错误信息通常非常丰富。搜索不起作用?所有这些代码示例都会有所帮助:。像这样的问题似乎有200多个。你可能想再加上5天,但你有时间差(天=10)…我不明白这10个问题是从哪里来的,为什么不是5datetime.date.today()而不是date.today()@dan klasson这对我不起作用,
    date
    对象没有
    timedelta
    方法。你在用什么Python版本?@DrTyrsa我的错。应该是:
    from datetime import timedelta,date;date.today()+timedelta(days=10)
    datetime.datetime-为什么要两次?像“from datetime import datetime,timedelta”这样导入会增加数据的可读性code@paulmorriss:您正在调用
    datetime
    模块中
    datetime
    类上的
    strtime
    方法,因此,您需要指定
    datetime.datetime
    。我们是否都同意将常用类命名为与包含它的模块相同的名称是一个愚蠢的想法?什么是日期时间?你不能依靠惯例来了解,但必须始终关注进口。长尾遗留问题存在。它“应该”是datetime import datetime的
    ,因为类是CamelCased,但datetime在PEP8之前。代码不错。但是如果你想在get_date中测试addDays,对我来说没有必要。感谢Hanks,为我工作只是想指出,仅为此安装pandas是严重的过度。relativedelta在月-年等操作时特别有用。有一个小的输入错误,第三行应该是date2=date1+timedelta(天=5)
    
    from datetime import datetime, timedelta
    
    current_date = datetime.now()
    end_date = current_date + timedelta(days=-5) # Subtracting 5 days.
    end_date_formatted = end_date.strftime('%Y-%m-%d')
    print(end_date_formatted)