python 计算一年内的所有周的具体日期

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import datetime
import collections
def get_date_list(starttime='20151101',endtime='20151210'):
'''计算输入的起始日期和结束日期之间的所有日期'''
    datelist=[]
    d1 = datetime.datetime(int(starttime[0:4]),int(starttime[4:6]),int(starttime[6:8]))
    d2 = datetime.datetime(int(endtime[0:4]),int(endtime[4:6]),int(endtime[6:8]))
    for i in range((d2-d1).days+1):
        d3=d1+datetime.timedelta(days=i)
        datelist.append(str(d3.strftime("%Y%m%d")))
    print datelist
    return datelist
def date_list_fun(starttime='20151101',endtime='20151210'):
    '''计算输入的起始日期和结束日期之间的所有日期'''
    _u=datetime.timedelta(days=1)
    startdate=datetime.datetime.strptime(starttime,'%Y%m%d')
    enddate=datetime.datetime.strptime(endtime,'%Y%m%d')
    n=0
    date_list=[]
    if  startdate<=enddate:
        # print startdate,enddate
        while 1:
            _time=startdate+n*_u
            date_list.append(_time.strftime('%Y%m%d'))
            n=n+1
            if _time==enddate:
                break
    print date_list
    return date_list
def allweeks(year=2015):
    '''计算一年内所有周的具体日期,从1月1号开始,12.31号结束
    输出如{1: ['20190101','20190106'],...} 只有六天
    '''
    start_date=datetime.datetime.strptime(str(year)+'0101','%Y%m%d')
    end_date=datetime.datetime.strptime(str(year)+'1231','%Y%m%d')
    _u=datetime.timedelta(days=1)
    n=0
    week_date={}
    while 1:
        _time=start_date+n*_u
        w=str(int(_time.strftime('%W'))+1)
        week_date.setdefault(w,[]).append(_time.strftime('%Y%m%d'))
        n=n+1
        if _time==end_date:
            break
    week_date_start_end={}
    for i in week_date:
       week_date_start_end[i]=[week_date[i][0],week_date[i][-1]]
    print   week_date
    print week_date_start_end
    return week_date

def all_weeks(year=2015):
    '''计算一年内所有周的具体日期,每周都是7天,可能最后一周到 下年
     week_date 输出如{1: ['20181231', '20190101', '20190102', '20190103', '20190104', '20190105', '20190106'],...}
     计算一年内所有周的起始日期
     week_date_start_end {1: ['20181231','20190106'],...}
     '''

    start_date=datetime.datetime.strptime(str(int(year)-1)+'1224','%Y%m%d')
    end_date=datetime.datetime.strptime(str(int(year)+1)+'0107','%Y%m%d')
    _u=datetime.timedelta(days=1)
    n=0
    week_date={}
    while 1:
        _time=start_date+n*_u
        y,w=_time.isocalendar()[:2]
        if y==year :
            week_date.setdefault(w,[]).append(_time.strftime('%Y%m%d'))
        n=n+1
        if _time==end_date:
            break
    week_date_start_end={}
    for i in week_date:
       week_date_start_end[i]=[week_date[i][0],week_date[i][-1]]
    print   week_date
    # print week_date_start_end
    return week_date,week_date_start_end


转载于:https://my.oschina.net/u/1458120/blog/547765

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值