【问题标题】:How to compute X week days into the past, using Python or SQL?如何使用 Python 或 SQL 计算过去的 X 周天数?
【发布时间】:2015-07-17 22:34:09
【问题描述】:

我需要准确计算过去 5 周的日期。例如如果今天的日期是 2015-05-07,我需要我的程序给我 2015-04-30。

目前我试过的是这个

today = datetime.date.today() - datetime.timedelta(5)

这给出了过去 5 天的时间。但我需要过去的第 5 个工作日。 我需要这个的目的是因为我有一个包含一些数据的数据库表,我需要编写一个 Python 脚本来获取过去 5 天的数据。

【问题讨论】:

  • 在mysql中:DATE_ADD(NOW(), INTERVAL -5 DAY)
  • 在事务 sql 中:DATEADD(day, -5, CURDATE())
  • @JeremyC.,这不是常规的 SQL。也许是 MS SQL?
  • 是交易,我的错我编辑了它适用于 sql server 2008 和更新的 Azure SQL db
  • 国定假日呢?他们应该计算还是不计算?工作日根据哪个地区?

标签: python mysql sql datetime


【解决方案1】:

过去的五天很简单:

select date_sub(CURDATE(), interval 5 day)

如果 week 天是指周一 - 周五,那么逻辑实际上相当简单。 5 week 天是一周,即 7 天(至少在美国是这样)。所以你的问题的答案是

select date_sub(CURDATE(), interval 7 day)

请注意,使用CASE,其他天数需要更复杂的逻辑。

【讨论】:

    【解决方案2】:

    Python datetime 对象有一个 isoweekday() 方法来帮助解决这个问题。此方法返回对应于星期几的数值。例如,星期一是整数 1。你想跳过星期六和星期日,它们分别对应 6 和 7。我们可以用它来回溯:

    from datetime import datetime, timedelta                                              
    
    def workingday(d, no_of_days):                                                              
        backdate = d                                                                      
        count = 0                                                                         
        while count < no_of_days:                                                                  
            backdate = backdate - timedelta(1)                                              
            if backdate.isoweekday() in (6,7):                                            
                continue                                                                  
            count += 1                                                                    
        return backdate.strftime("%Y-%m-%d")
    
    
    d = datetime.strptime("2015-05-07","%Y-%m-%d")                                        
    print workingday(d, 5)
    
    Output:
    
    2015-04-30 
    

    我使用了您的日期格式。但是你可以很容易地改变这一点。

    您可以使用weekday() 代替isoweekday(),但现在星期一将返回为0,星期日将返回为6。

    【讨论】:

    • 谢谢我终于在python中得到了一些帮助。
    猜你喜欢
    • 2017-04-02
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2012-09-10
    相关资源
    最近更新 更多