【问题标题】:Week ending date with Sunday being the first day of the week星期结束日期,星期日是一周的第一天
【发布时间】:2019-06-14 01:14:40
【问题描述】:

我正在尝试获取日期列表的周结束日期。我找到了以下代码,它适用于传统的周一至周日周,但我需要周日至周六周(周日是一周的第一天)。

from datetime import datetime, timedelta

date_str = '2019-06-16'
date_obj = datetime.strptime(date_str, '%Y-%m-%d')

start_of_week = date_obj - timedelta(days=date_obj.weekday())
end_of_week = start_of_week + timedelta(days=6)  

print(start_of_week)
print(end_of_week)

以上代码返回:

2019-06-10 00:00:00

2019-06-16 00:00:00

我需要它来返回这个:

2019-06-16 00:00:00

2019-06-22 00:00:00

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    因此 weekday 返回 0 表示周一,6 表示周日。要将其更改为周日的 0 和周六的 6

    start_of_week = date_obj - timedelta((date_obj.weekday() + 1) % 7)
    

    【讨论】:

    • 非常感谢!感谢您的快速响应。
    【解决方案2】:

    我认为在 python 中,星期日是一周的开始日,哈哈。下面的代码可能会对您有所帮助。

    from datetime import datetime, timedelta
    
    
    # this may be the func you need.
    def date_start_end(date):
        """
        calc the start and end date for input date. Sunday is the start day for a week.
        :param date: any date
        :return: st: the start date(Sunday) for this week
        :return: end: the end date(Saturday) for this week
        """
        weekDate = int(date.strftime('%w'))
    
        st = date + timedelta(-weekDate)
        end = date + timedelta(6 - weekDate)
    
        return st, end
    
    date = datetime(2019, 6, 16)
    
    st, end = date_start_end(date)
    print(st)
    print(end)
    
    >>>2019-06-16 00:00:00
    >>>2019-06-22 00:00:00
    

    【讨论】:

      【解决方案3】:

      加上我的两分钱。 Datetime 也有一个 isoweekday 方法,该方法具有星期一的 1 点和星期日的 7 点。类似于 @Deepstop 的答案,但要短一点:

      start_of_week = date_sample - timedelta(days=date_sample.isoweekday()%7)
      

      【讨论】:

        猜你喜欢
        • 2016-11-29
        • 2018-07-25
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多