【问题标题】:Rounding dates in PythonPython中的四舍五入日期
【发布时间】:2014-05-05 04:18:06
【问题描述】:

假设我正在查看特定日期:

from datetime import date, timedelta
days_to_substract = 65
my_date = date.today()-timedelta(days=days_to_subtract)

我怎样才能找到:

  1. Monday 在my_date 之前的日期(如果my_date 不是星期一)
  2. Monday 与 my_date 最接近的日期

有没有办法在datetime 中舍入日期?

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    你可以使用 dateutil

    from datetime import *
    from dateutil.relativedelta import *
    
    days_to_substract = 64
    my_date   = (date.today()-timedelta(days=days_to_substract))
    next=my_date+relativedelta(weekday=MO)
    previous=my_date+relativedelta(weekday=MO(-1))
    print ('mydate is %s' %my_date)
    print ('next monday is %s' %next)
    print ('previous monday is %s' %previous)
    
    diff1=my_date-previous
    diff2=next-my_date
    if diff2<diff1:
        print ('Closest monday is %s' %next)
    else:
        print ('Closest monday is %s' %previous)
    

    将输出:

    mydate is 2014-01-21
    next monday is 2014-01-27
    previous monday is 2014-01-20
    Closest monday is 2014-01-20
    

    【讨论】:

    • 下周一不是更准确,最接近的是绝对差值最小的两个吗?
    【解决方案2】:

    使用工作日:

    from datetime import date, timedelta
    d=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    days_to_substract = 65
    my_date = (date.today()-timedelta(days=days_to_substract))
    t=my_date.weekday()
    print "Today is ",d[t]," Wait ",(6-t+1)," days for Monday"
    

    输出:

    Today is  Monday  Wait  7  days for Monday
    

    【讨论】:

    • 6-t+1 只是7-t :)
    【解决方案3】:

    您可以使用 date.weekday (http://docs.python.org/2/library/datetime.html#datetime.date.weekday) 来查找“my_date”的工作日整数值。然后您可以使用当前工作日的差异(例如,工作日 = 2 表示星期三)并执行​​另一个 timedelta 计算。当我尝试时,这对我有用:

    from datetime import *
    
    days_to_subtract = 65
    my_date = (date.today() - timedelta(days=days_to_subtract))
    dow = my_date.weekday()
    monday_my_date = (my_date - timedelta(days=dow))
    
    print(monday_my_date)
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 2021-12-16
      • 2018-06-17
      • 1970-01-01
      相关资源
      最近更新 更多