【问题标题】:Getting a date from a week number从周数中获取日期
【发布时间】:2014-08-24 07:40:09
【问题描述】:

我正在尝试根据星期几来确定日期,但有些麻烦。

date.weekday() 返回星期几,其中星期一为 0,星期日为 6。

date.strftime()date.strptime()%w 指令使用 0 表示周日,6 表示周六。

当试图从date.weekday() 中找出一个给定周数的日期时,这会导致一些非常烦人的问题。

有没有更好的方法从周数中获取日期?

编辑:

添加示例。

import datetime

original_date = datetime.date(2014, 8, 24)
week_of_the_date = original_date.isocalendar()[1] # 34
day_of_the_date = original_date.isocalendar()[2] # 7
temp = '{0} {1} {2}'.format(*(2014, week_of_the_date, day_of_the_date-1))
date_from_week = datetime.datetime.strptime(temp, '%Y %W %w')
week_from_new_date = date_from_week.isocalendar()[1] # 35!!

编辑 2:
我最终把日期的东西放在视图中(使用 jQuery UI),它有更一致的星期概念。

【问题讨论】:

  • 在这种情况下,星期数到底是什么,date.weekday 与它有什么关系?示例输入和输出会很有帮助。
  • 啊,不知道这个问题,非常丑陋的不一致!不同但相关的问题here
  • 我认为 weekdaystrftime 使用 %W 的周日和周一的区别是没有实际意义的 - 你可以使用 isoweekday 来让它们排队。真正的问题是strftime,基于底层的 C 函数,确定一年中的第一周与 ISO 定义不同。使用%W,文档说:“第一个星期一之前的新年中的所有日子都被认为是在第 0 周”。 ISO日历将包含第一个星期四的那一周计为第一周,原因我不明白,而且看起来没有比链接的答案更好的方法来扭转它。
  • @SylvainLeroux - 我想那里有足够的实际信息,我不想因为指出一个骗子而受到赞扬。

标签: python


【解决方案1】:

我认为 weekdaystrftime 使用 %W 之间的周日和周一区别是没有实际意义的 - 你可以使用 isoweekday 让它们排队,或者如果你愿意,可以使用 %Ustrftime星期日作为一周的第一天。真正的问题是strftime,基于底层C 函数,确定一年中的第一周与ISO 定义不同。使用%W,文档说:“第一个星期一之前的新年中的所有日子都被认为是在第 0 周”。 ISO 日历将包含第一个星期四的那一周视为第一周,原因我不明白。

我发现使用 ISO 周的两种方法是:恢复 datetime.date 实例或支持各种操作:

  1. 这个答案用一个简单的timedelta 方法: What's the best way to find the inverse of datetime.isocalendar()?
  2. 这个第三方库:https://pypi.python.org/pypi/isoweek/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2017-08-09
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多