日期为未来6个月



我在django中使用日期时间Python模块。如果有效期从当前日期起小于或等于6个月,我希望计算该日期。

我之所以要在当前日期后6个月生成一个日期,是为了设置一个警报,突出显示发生该事件的字段/列。我不知道我的问题是否清楚。我一直在读关于timedelta函数的文章,但我并没有真正理解它。我正试图写一个if语句来统计这个条件。有谁能帮我吗?我是django和python的新手。

有两种方法,一种只是稍微不准确,另一种则以不同的方式不准确:

  • 添加365.25/2天的datetime.timedelta()(平均年长除以2):

      import datetime
      sixmonths = datetime.datetime.now() + datetime.timedelta(days=365.25/2)
    

    这种方法将为您提供未来6个月的日期时间戳,我们将6个星期定义为半年(平均)。

  • 使用外部dateutil库,它有一个出色的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)

半年时间增量仅应用于日期时会变得不那么准确(现在忽略了增量的5/8天分量)。

如果"6个月"是指180天,则可以使用:

import datetime
d = datetime.date.today()
d + datetime.timedelta(6 * 30)

或者,如果你是按日历计算的实际6个月,你必须查找日历模块,并在每个月进行一些查找。例如:

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)

我会严肃地看Delorean一眼。它是建立在dateutilpytz之上的,只需执行以下操作即可。

>>> 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简单CCD_ 7。

如果您想获得特定日期,这可能对您有用:

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

希望它能有所帮助!

相关内容

  • 没有找到相关文章

最新更新