可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have a date "10/10/11(m-d-y)"
and I want to add 5 days to it using a Python script. Please consider a general solution that works on the month ends also.
I am using following code:
import re from datetime import datetime StartDate = "10/10/11" Date = datetime.strptime(StartDate, "%m/%d/%y")
print Date
-> is printing '2011-10-10 00:00:00'
Now I want to add 5 days to this date. I used the following code:
EndDate = Date.today()+timedelta(days=10)
Which returned this error:
name 'timedelta' is not defined
回答1:
The previous answers are correct but it's generally a better practice to do:
import datetime
Then you'll have, using datetime.timedelta
:
date_1 = datetime.datetime.strptime(start_date, "%m/%d/%y") end_date = date_1 + datetime.timedelta(days=10)
回答2:
Import timedelta
first.
from datetime import timedelta
And Date.today()
will return today's datetime, may be you want
EndDate = Date + timedelta(days=10)
回答3:
I guess you are missing something like that:
from datetime import timedelta
回答4:
If you happen to already be using pandas, you can save a little space by not specifying the format:
import pandas as pd startdate = "10/10/2011" enddate = pd.to_datetime(startdate) + pd.DateOffset(days=5)
回答5:
Here is another method to add days on date using dateutil's 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')
Output:
Today: 25/06/2015 15:56:09
After 5 Days: 30/06/2015 15:56:09
回答6:
Here is a function of getting from now + specified days
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)
Usage:
addDays = 3 #days output_format = '%d-%m-%Y' output = get_date(output_format, addDays) print output
回答7:
In order to have have a less verbose code, and avoid name conflicts between datetime and datetime.datetime, you should rename the classes with CamelCase names.
from datetime import datetime as DateTime, timedelta as TimeDelta
So you can do the following, which I think it is clear.
date_1 = DateTime.today() end_date = date_1 + TimeDelta(days=10)
Also, there would be no name conflict if you want to import datetime
later on.
回答8:
If you want add days to date now, you can use this code
from datetime import datetime from datetime import timedelta date_now_more_5_days = (datetime.now() + timedelta(days=5) ).strftime('%Y-%m-%d')
回答9:
This is my initial but more complete development for a generic dateadd function in python
import datetime from dateutil.relativedelta import relativedelta def dateadd(date, part ,value): if part=='year': result = date + (value * relativedelta(years = 1)) elif part == 'month': result = date + (value * relativedelta(months = 1)) elif part == 'day': result = date + (value * relativedelta(days = 1)) elif part == 'hour': result = date + (value * relativedelta(hours = 1)) elif part == 'minute': result = date + (value * relativedelta(minutes = 1)) elif part == 'second': result = date + (value * relativedelta(seconds = 1)) return result date = datetime.datetime.now() print(date, "now") print(dateadd(date,'year',2) ,"year',2", ) print(dateadd(date,'year',-2) ,"year',-2", ) print(dateadd(date,'month',2) ,"month',2", ) print(dateadd(date,'month',-2) ,"month',-2", ) print(dateadd(date,'day',2) ,"day',2", ) print(dateadd(date,'day',-2) ,"day',-2", ) print(dateadd(date,'hour',2) ,"hour',2", ) print(dateadd(date,'hour',-2) ,"hour',-2", ) print(dateadd(date,'minute',2) ,"minute',2", ) print(dateadd(date,'minute',-2),"minute',-2", ) print(dateadd(date,'second',2) ,"second',2", ) print(dateadd(date,'second',-2),"second',-2", )
Result:
2018-03-08 09:04:12.619699 now
2020-03-08 09:04:12.619699 year',2
2016-03-08 09:04:12.619699 year',-2
2018-05-08 09:04:12.619699 month',2
2018-01-08 09:04:12.619699 month',-2
2018-03-10 09:04:12.619699 day',2
2018-03-06 09:04:12.619699 day',-2
2018-03-08 11:04:12.619699 hour',2
2018-03-08 07:04:12.619699 hour',-2
2018-03-08 09:06:12.619699 minute',2
2018-03-08 09:02:12.619699 minute',-2
2018-03-08 09:04:14.619699 second',2
2018-03-08 09:04:10.619699 second',-2