使用 Python 将天数添加到日期

2025-01-08 08:50:00
admin
原创
122
摘要:问题描述:我有一个日期"10/10/11(m-d-y)",我想使用 Python 脚本为其添加 5 天。请考虑一个在月底也适用的通用解决方案。我正在使用以下代码:import re from datetime import datetime StartDate = "10/10...

问题描述:

我有一个日期"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

解决方案 1:

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

import datetime

然后你就可以使用datetime.timedelta

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

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

解决方案 2:

進入timedelta並且date先行。

from datetime import timedelta, date

并将date.today()返回今天的日期时间,然后您可以timedelta向其中添加:

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

解决方案 3:

如果你恰好已经在使用pandas,那么可以通过不指定格式来节省一些空间:

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

解决方案 4:

这可能会有帮助:

from datetime import date, timedelta
date1 = date(2011, 10, 10)
date2 = date1 + timedelta(days=5)
print (date2)

解决方案 5:

如果您现在想添加日期,可以使用此代码

from datetime import datetime
from datetime import timedelta


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

解决方案 6:

这是使用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')

输出:

今天:2015 年 6 月 25 日 15:56:09

5 天后:2015 年 6 月 30 日 15:56:09

解决方案 7:

我想你错过了类似的东西:

from datetime import timedelta

解决方案 8:

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

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

解决方案 9:

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

from datetime import datetime as DateTime, timedelta as TimeDelta

所以你可以做以下的事情,我认为这更清楚。

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

此外,如果您以后想要使用,也不会发生名称冲突。import datetime

解决方案 10:

尝试一下:

在当前日期上添加 5 天。

from datetime import datetime, timedelta

current_date = datetime.now()
end_date = current_date + timedelta(days=5) # Adding 5 days.
end_date_formatted = end_date.strftime('%Y-%m-%d')
print(end_date_formatted)

从当前日期减去 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)

解决方案 11:

您忘记从以下位置导入timedelta函数datetime

你可以这样修复它:

import re
from datetime import datetime, timedelta

StartDate = "10/10/11"

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

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

print(EndDate)

这是上面代码的输出:2012-08-03 23:13:53.485750

解决方案 12:

我刚刚看到这个旧帖子:

我检查过了,但大多数答案都一样。我喜欢其中两个答案,所以我想检查一下这两种方法的效率。

第一种方法:使用 DateTime 模块第二种方法:使用 panda 库

因此,我运行了大约 10k 次测试,而 pandas 库方法的速度要慢得多。因此,我建议使用内置的 DateTime 模块。

from datetime import date, timedelta
import pandas as pd
import timeit

def using_datetime():
    pre_date = date(2013, 10, 10)
    day_date = pre_date + timedelta(days=5)
    return day_date

def using_pd():
    start_date = "10/10/2022"
    pd_date = pd.to_datetime(start_date)
    end_date = pd_date + pd.DateOffset(days=5)
    return end_date
    

for func in [using_datetime, using_pd]:
    print(f"{func.__name__} Time Took: ",  timeit.timeit(stmt=func, number=10000))
    
# Output 
# using_datetime Time Took:  0.009390000021085143
# using_pd Time Took:  2.1051381999859586

解决方案 13:

你可以这样使用它,它会起作用:

如果您只需要日期,那么:

import datetime

StartDate = "10/10/11"
Date = datetime.datetime.strptime(StartDate, "%m/%d/%y").date()
print("Date: ", Date)

EndDate = Date + datetime.timedelta(days=10)
print("EndDate: ", EndDate)

如果您需要两个日期时间,那么:

import datetime

StartDate = "10/10/11"
Date = datetime.datetime.strptime(StartDate, "%m/%d/%y")
print("Date: ", Date)

EndDate = Date + datetime.timedelta(days=10)
print("EndDate: ", EndDate)

解决方案 14:

使用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

解决方案 15:

一般来说,你现在已经有答案了,但也许我创建的课程也会有所帮助。对我来说,它解决了我在 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()- 这会将您的字符串日期转换为具有您在第 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})与第 7 部分类似,但需要按小时工作

  9. GetDate("2019-08-08").time_delta_seconds({number_of_seconds})与第 7 部分类似,但以秒为单位

解决方案 16:

有时我们需要使用起始日期和结束日期进行搜索。如果使用date__range,则需要添加 1 天,to_date否则查询集将为空。

例子:

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])

解决方案 17:

我已经看到了一个 pandas 示例,但这里有一个转折点,你可以直接导入 Day 类

from pandas.tseries.offsets import Day

date1 = datetime(2011, 10, 10)
date2 = date1 + 5 * Day()

解决方案 18:

class myDate:

    def __init__(self):
        self.day = 0
        self.month = 0
        self.year = 0
        ## for checking valid days month and year
        while (True):
            d = int(input("Enter The day :- "))
            if (d > 31):
                print("Plz 1 To 30 value Enter ........")
            else:
                self.day = d
                break

        while (True):
            m = int(input("Enter The Month :- "))
            if (m > 13):
                print("Plz 1 To 12 value Enter ........")
            else:
                self.month = m
                break

        while (True):
            y = int(input("Enter The Year :- "))
            if (y > 9999 and y < 0000):
                print("Plz 0000 To 9999 value Enter ........")
            else:
                self.year = y
                break
    ## method for aday ands cnttract days
    def adayDays(self, n):
        ## aday days to date day
        nd = self.day + n
        print(nd)
        ## check days subtract from date
        if nd == 0: ## check if days are 7  subtracted from 7 then,........
            if(self.year % 4 == 0):
                if(self.month == 3):
                    self.day = 29
                    self.month -= 1
                    self.year = self. year
            else:
                if(self.month == 3):
                    self.day = 28
                    self.month -= 1
                    self.year = self. year
            if  (self.month == 5) or (self.month == 7) or (self.month == 8) or (self.month == 10) or (self.month == 12):
                self.day = 30
                self.month -= 1
                self.year = self. year
                   
            elif (self.month == 2) or (self.month == 4) or (self.month == 6) or (self.month == 9) or (self.month == 11):
                self.day = 31
                self.month -= 1
                self.year = self. year

            elif(self.month == 1):
                self.month = 12
                self.year -= 1    
        ## nd == 0 if condition over
        ## after subtract days to day io goes into negative then
        elif nd < 0 :   
            n = abs(n)## return positive if no is negative
            for i in range (n,0,-1): ## 
                
                if self.day == 0:

                    if self.month == 1:
                        self.day = 30
                        
                        self.month = 12
                        self.year -= 1
                    else:
                        self.month -= 1
                        if(self.month == 1) or (self.month == 3)or (self.month == 5) or (self.month == 7) or (self.month == 8) or (self.month == 10) or (self.month ==12):
                            self.day = 30
                        elif(self.month == 4)or (self.month == 6) or (self.month == 9) or (self.month == 11):
                            self.day = 29
                        elif(self.month == 2):
                            if(self.year % 4 == 0):
                                self.day == 28
                            else:
                                self.day == 27
                else:
                    self.day -= 1

        ## enf of elif negative days
        ## adaying days to DATE
        else:
            cnt = 0
            while (True):

                if self.month == 2:  # check leap year
                    
                    if(self.year % 4 == 0):
                        if(nd > 29):
                            cnt = nd - 29
                            nd = cnt
                            self.month += 1
                        else:
                            self.day = nd
                            break
                ## if not leap year then
                    else:  
                    
                        if(nd > 28):
                            cnt = nd - 28
                            nd = cnt
                            self.month += 1
                        else:
                            self.day = nd
                            break
                ## checking month other than february month
                elif(self.month == 1) or (self.month == 3) or (self.month == 5) or (self.month == 7) or (self.month == 8) or (self.month == 10) or (self.month == 12):
                    if(nd > 31):
                        cnt = nd - 31
                        nd = cnt

                        if(self.month == 12):
                            self.month = 1
                            self.year += 1
                        else:
                            self.month += 1
                    else:
                        self.day = nd
                        break

                elif(self.month == 4) or (self.month == 6) or (self.month == 9) or (self.month == 11):
                    if(nd > 30):
                        cnt = nd - 30
                        nd = cnt
                        self.month += 1

                    else:
                        self.day = nd
                        break
                ## end of month condition
        ## end of while loop
    ## end of else condition for adaying days
    def formatDate(self,frmt):

        if(frmt == 1):
            ff=str(self.day)+"-"+str(self.month)+"-"+str(self.year)
        elif(frmt == 2):
            ff=str(self.month)+"-"+str(self.day)+"-"+str(self.year)
        elif(frmt == 3):
            ff =str(self.year),"-",str(self.month),"-",str(self.day)
        elif(frmt == 0):
            print("Thanky You.....................")
            
        else:
            print("Enter Correct Choice.......")
        print(ff)
            
            

dt = myDate()
nday = int(input("Enter No. For Aday or SUBTRACT Days :: "))
dt.adayDays(nday)
print("1 : day-month-year")
print("2 : month-day-year")
print("3 : year-month-day")
print("0 : EXIT")
frmt = int (input("Enter Your Choice :: "))
dt.formatDate(frmt)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用