【问题标题】:Python: give start and end of week data from a given datePython:给出给定日期的开始和结束周数据
【发布时间】:2013-10-13 12:35:11
【问题描述】:
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

过去 2 天学习了 python,想知道是否有更清洁的方法来做到这一点。这种方法有效......它看起来很丑,而且必须为每个日期创建一个新的时间变量似乎很愚蠢,并且应该有一种方法可以通过一个简单的电话将给定的日期偏移到一周的开始和结束,但是我在互联网上找不到任何看起来可以工作的文档或文档。

【问题讨论】:

  • 这不是对编程的批评,但我从未见过有人写过像“2013 年 10 月 13 日”这样的日期。您确定这就是您要解析输入的方式吗?
  • @Brionius 我不知道 OP 来自哪里,但在我的国家,这种格式很常见(甚至可能是最常见的)。
  • 嗯 - 多么有趣。我从未见过基于斜线的日期表示法中的非数字段。

标签: python date time


【解决方案1】:

如果您想保持标准时间格式并参考当前日期,则略有不同:

from datetime import date, timedelta

today = date.today()
start = today - timedelta(days=today.weekday())
end = start + timedelta(days=6)
print("Today: " + str(today))
print("Start: " + str(start))
print("End: " + str(end))

【讨论】:

    【解决方案2】:

    你也可以使用Arrow:

    import arrow
    now = arrow.now()
    start_of_week = now.floor('week')
    end_of_week = now.ceil('week')
    

    【讨论】:

      【解决方案3】:

      使用pendulum 模块:

      today = pendulum.now()
      start = today.start_of('week')
      end = today.end_of('week')
      

      【讨论】:

      • 这正是我所需要的
      • ...这正是您所需要的,只要您的一周在周日晚上开始和结束。 Pendulum 显然无法将周末设置为星期六 23:59:59。
      • 我今天发现了摆。根据其docs,真正的#ISO8601 周从周一开始,到周日结束。如果不能改变,那就太可惜了。经过一番搜索,我找到了this。因此,如果您添加pendulum.week_starts_at(pendulum.SUNDAY)pendulum.week_ends_at(pendulum.SATURDAY),您应该能够使用start_of()end_of() 方法获得正确的日期。我不确定这是否是要走的路,但它似乎在我的测试中有效。
      【解决方案4】:

      使用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)
      

      编辑:

      print(start.strftime('%d/%b/%Y'))
      print(end.strftime('%d/%b/%Y'))
      

      【讨论】:

      • 是日期时间对象的开始和结束,还是字符串。我需要像我最初提出的问题一样格式化输出,我尝试使用 ,datetime.strftime("%a, %d %b %Y",end),但是它说 end 是一个刺痛而不是 datetime 对象。
      • 感谢您的帮助,最后一个问题,有什么办法可以将一周的开始时间改为星期日而不是星期一?
      • 只需将工作日改天。像 start = dt - timedelta(days = (dt.weekday() + 1) % 7) 这样的东西应该可以工作。
      • 如果白天也有时间成分,加法和减法如何工作? day = '12/10/2013 13:43:43' 之类的东西?
      • @SaravananNandhan 确保您从日期时间导入日期时间,而不仅仅是日期时间。所以from datetime import datetime 而不是import datetime
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多