如何使用Python或SQL计算过去的X周天数?
我需要精确计算过去5周的天数。e、 g.如果今天的日期是2015-05-07,我需要我的计划给我2015-04-30 到目前为止我试过的是这个吗如何使用Python或SQL计算过去的X周天数?,python,mysql,sql,datetime,Python,Mysql,Sql,Datetime,我需要精确计算过去5周的天数。e、 g.如果今天的日期是2015-05-07,我需要我的计划给我2015-04-30 到目前为止我试过的是这个吗 today = datetime.date.today() - datetime.timedelta(5) 这正好是过去的5天。但我需要回到过去的第五个工作日。 我之所以需要这样做,是因为我有一个包含一些数据的数据库表,我需要编写一个Python脚本来获取过去5天的数据。过去的5天只是: select date_sub(CURDATE(), inte
today = datetime.date.today() - datetime.timedelta(5)
这正好是过去的5天。但我需要回到过去的第五个工作日。
我之所以需要这样做,是因为我有一个包含一些数据的数据库表,我需要编写一个Python脚本来获取过去5天的数据。过去的5天只是:
select date_sub(CURDATE(), interval 5 day)
如果你说星期一是指周一至周五,那么逻辑其实相当简单。5周是一周,也就是7天(至少在美国)。所以你的问题的答案是
select date_sub(CURDATE(), interval 7 day)
请注意,其他天数将需要更复杂的逻辑,使用
CASE
Pythondatetime
对象有一个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
从datetime导入datetime,timedelta
def工作日(d,无工作日):
回溯日期=d
计数=0
当计数<无天数时:
回溯日期=回溯日期-时间增量(1)
如果backdate.isoweekday()位于(6,7)中:
继续
计数+=1
返回backdate.strftime(“%Y-%m-%d”)
d=datetime.strtime(“2015-05-07”,%Y-%m-%d”)
打印工作日(d、5)
输出:
2015-04-30
我用过你的约会方式。但你可以很容易地改变这一点
您可以使用
weekday()
而不是isoweekday()
,但是现在星期一将返回为0,星期天将返回为6。在mysql中:DATE\u ADD(now(),INTERVAL-5天)
在transact-sql中:DATEADD(DAY,-5,CURDATE())@JeremyC.,这不是常规sql。也许MS SQL?是transact,我的错我编辑过它适用于SQL server 2008和更新版本以及azure SQL数据库国家假日呢?他们应该算还是不算?工作日根据哪个地区?谢谢最后我在python方面得到了一些帮助。