【问题标题】:6 month before date in python [duplicate]python中的日期前6个月[重复]
【发布时间】:2015-10-21 07:17:26
【问题描述】:

我想在 python 中计算日期前 6 个月。那么日期是否出现任何问题(例如 8 月 31 日)。我们可以使用 timedelta() 函数解决这个问题吗。我们可以像 date=now 这样传递月份吗- timedelta(days=days) 而不是参数天数。

【问题讨论】:

  • 那么您(或您的组织)如何定义 8 月之前的 6 个月?如果按计费周期每月的最后一天计算,则可能是 2 月 28 日或 2 月 29 日,如果一个月是 30 天,则可能是 3 月 4 日。你需要澄清这一点。
  • 六个月的每日报告。我认为最简单和更好的选择是减去 183 天,这样脚本就不会中断
  • 那么你已经通过date = datetime.now() - timedelta(days=183)得到了答案,如果这是你的定义(6个月被定义为183天)。

标签: python datetime


【解决方案1】:

timedelta 不支持月份,但您可以尝试使用dateutil.relativedelta 进行计算,它确实支持月份。

例子-

>>> from dateutil import relativedelta
>>> from datetime import datetime
>>> n = datetime.now()

>>> n - relativedelta.relativedelta(months=6)
datetime.datetime(2015, 1, 30, 10, 5, 32, 491815)

>>> n - relativedelta.relativedelta(months=8)
datetime.datetime(2014, 11, 30, 10, 5, 32, 491815)

【讨论】:

    【解决方案2】:

    如果您只对 6 个月前的月份感兴趣,那么试试这个:

    import datetime
    
    month = datetime.datetime.now().month - 6
    if month < 1:
        month = 12 + month  # At this point month is 0 or a negative number so we add
    

    【讨论】:

      【解决方案3】:

      以下功能应该适用于加月和减月。

      import datetime
      import calendar
      
      def add_months(sourcedate, months):
           month = sourcedate.month - 1 + months
           year = sourcedate.year + month / 12
           month = month % 12 + 1
           day = min(sourcedate.day,calendar.monthrange(year,month)[1])
           return datetime.date(year,month,day)
      
      #Example: Get today    
      dateToday = datetime.date.today()
      
      #Substract 6 month from Today
      print add_months(dateToday ,-6)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2021-06-11
        • 2018-12-19
        相关资源
        最近更新 更多