我在django中使用datetime Python模块。如果到期日期小于或等于当前日期的6个月,我希望计算日期。
我想要从当前日期起6个月生成日期的原因是设置一个警告,突出显示该事件发生的字段/列。我不知道我的问题是否清楚。我一直在阅读有关timedelta功能的内容,但我真的无法理解它。我试图写一个if语句来满足这个条件。有人能帮我吗?是django和python的新手。
答案 0 :(得分:8)
有两种方法,一种方法略有不准确,另一种方法不准确:
添加datetime.timedelta()
365.25 / 2天(平均年份除以2):
import datetime
sixmonths = datetime.datetime.now() + datetime.timedelta(days=365.25/2)
此方法将在未来6个月为您提供日期时间戳,我们将6个monhs定义为半年(平均)。
使用外部dateutil
library,它有一个很好的relativedelta
课程,可根据您当前日期的日历计算添加6个月:
import datetime
from dateutil.relativedelat import relativedelta
sixmonths = datetime.datetime.now() + relativedelta(months=6)
此方法将在未来6个月为您提供日期时间戳,其中日期的月份组件已转发6,并且它将考虑月份边界,确保不跨越它们。例如,8月30日加6个月变为2月28日或29日(闰年允许)。
演示可能会有所帮助。在我的时区,在发布时,这转换为:
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 2, 18, 12, 16, 0, 547567)
>>> now + datetime.timedelta(days=365.25/2)
datetime.datetime(2013, 8, 20, 3, 16, 0, 547567)
>>> now + relativedelta(months=6)
datetime.datetime(2013, 8, 18, 12, 16, 0, 547567)
因此两种方法之间存在1天15小时的差异。
同样的方法也适用于datetime.date
个对象:
>>> today = datetime.date.today()
>>> today
datetime.date(2013, 2, 18)
>>> today + datetime.timedelta(days=365.25/2)
datetime.date(2013, 8, 19)
>>> today + relativedelta(months=6)
datetime.date(2013, 8, 18)
半年时间delta仅在应用于日期时变得不那么精确(现在忽略了δ的第5/8天成分)。
答案 1 :(得分:1)
如果“6个月”表示180天,您可以使用:
import datetime
d = datetime.date.today()
d + datetime.timedelta(6 * 30)
或者,如果您,按日历表示实际6个月,则必须查找calendar module并在每个月进行一些查找。例如:
import datetime
import calendar
def add_6_months(a_date):
month = a_date.month - 1 + 6
year = a_date.year + month / 12
month = month % 12 + 1
day = min(a_date.day,calendar.monthrange(year, month)[1])
return datetime.date(year, month, day)
答案 2 :(得分:0)
我会认真看待Delorean。它建立在dateutil
和pytz
之上,可以完成您所要求的内容。
>>> d = Delorean()
>>> d
Delorean(datetime=2013-02-21 06:00:21.195025+00:00, timezone=UTC)
>>> d.next_month(6)
Delorean(datetime=2013-08-21 06:00:21.195025+00:00, timezone=UTC)
它考虑了所有dateutil计算以及时区转换的提供和界面。在Delorean对象上获得所需的日期时间简单.datetime
。
答案 3 :(得分:-1)
如果您想找回具体日期,这可能对您有用:
from calendar import datetime
datetime.date(2019,1,1).strftime("%a %d")
#The arguments here are: year, month, day and the method is there to return a formated kind of date - in this case - day of the week and day of the month.
结果将是: 星期二01
希望有帮助!