Python:给出给定日期的开始和结束周数据

sha*_*t09 60 python time date

day = "13/Oct/2013"
print("Parsing :",day)
day, mon, yr= day.split("/")
sday = yr+" "+day+" "+mon
myday = time.strptime(sday, '%Y %d %b')
Sstart = yr+" "+time.strftime("%U",myday )+" 0"
Send = yr+" "+time.strftime("%U",myday )+" 6"
startweek = time.strptime(Sstart, '%Y %U %w')
endweek = time.strptime(Send, '%Y %U %w')
print("Start of week:",time.strftime("%a, %d %b %Y",startweek))
print("End of week:",time.strftime("%a, %d %b %Y",endweek))
print("Data entered:",time.strftime("%a, %d %b %Y",myday))

out:
Parsing : 13/Oct/2013
Start of week: Sun, 13 Oct 2013
End of week: Sat, 19 Oct 2013
Sun, 13 Oct 2013
Run Code Online (Sandbox Code Playgroud)

在过去的两天里学到了python,并且想知道是否有更干净的方法来做这个.这个方法有效...它只是看起来很难看而且为每个日期创建一个新的时间变量似乎很愚蠢是一种通过一个简单的调用将给定日期偏移到一周的开始和结束但我无法在互联网上找到任何东西的方法,或者看起来它会起作用的文档.

Hyp*_*eus 136

使用该datetime模块.

这将产生一周的开始和结束(从星期一到星期日):

from datetime import datetime, timedelta

day = '12/Oct/2013'
dt = datetime.strptime(day, '%d/%b/%Y')
start = dt - timedelta(days=dt.weekday())
end = start + timedelta(days=6)
print(start)
print(end)
Run Code Online (Sandbox Code Playgroud)

编辑:

print(start.strftime('%d/%b/%Y'))
print(end.strftime('%d/%b/%Y'))
Run Code Online (Sandbox Code Playgroud)

  • 只需将工作日移动一天.这样的事情`start = dt - timedelta(days =(dt.weekday()+ 1)%7)`应该有效. (13认同)
  • 是开始和结束日期时间对象,还是字符串。我需要按照我最初提出的问题格式化输出,我尝试使用 ,datetime.strftime("%a, %d %b %Y",end),但是它说 end 是一个刺痛,而不是 datetime 对象。 (2认同)

pal*_*der 11

如果要保留标准时间格式并参考当天,则略有变化:

from datetime import datetime, timedelta

today = datetime.now().date()
start = today - timedelta(days=today.weekday())
end = start + timedelta(days=6)
print("Today: " + str(today))
print("Start: " + str(start))
print("End: " + str(end))
Run Code Online (Sandbox Code Playgroud)


Alo*_*man 11

您还可以使用Arrow

import arrow
now = arrow.now()
start_of_week = now.floor('week')
end_of_week = now.ceil('week')
Run Code Online (Sandbox Code Playgroud)


小智 7

使用摆锤模块

    today = pendulum.now()
    start = today.start_of('week')
    end = today.end_of('week')
Run Code Online (Sandbox Code Playgroud)

  • 今天我知道了钟摆。根据其[文档](https://pendulum.eustace.io/docs/#modifiers),真正的 #ISO8601 周从星期一开始,到星期日结束。如果不能改变这一点,那就太可惜了。经过一番搜索,我找到了[这个](https://github.com/sdispater/pendulum/issues/78#issuecomment-565538992)。因此,如果添加 `pendulum.week_starts_at(pendulum.SUNDAY)` 和 `pendulum.week_ends_at(pendulum.SATURDAY)`,您应该能够使用 `start_of()` 和 `end_of()` 方法获得正确的日期。我不确定这是否是正确的方法,但它似乎在我的测试中有效。 (7认同)