在当前月份中循环每一天
大致的思路就是先计算出当月的第一天和下个月的第一天日期,还有当月总共有多少天,然后把第一天日期按照月总天数累加到下个月的第一天,就ok 啦
from datetime import datetime, date, timedelta
import calendar def get_month_range(start_date=None):
if start_date is None:
print(date.today()) # 2019-03-05 # 今天的日期
start_date = date.today().replace(day=1) # 修改当前时间。比如修改成当月1号
print(start_date) # 2019-03-01 当月的第一天日期
_, days_in_month = calendar.monthrange(start_date.year, start_date.month)
print(days_in_month) # 31 当月总天数31天
end_date = start_date + timedelta(days=days_in_month)
print(end_date) # 2019-04-01
return (start_date, end_date) start_date,end_date = get_month_range()
print(start_date,end_date) #日期范围 2019-03-01 2019-04-01
a_day=timedelta(days=1)
print(a_day) # 1 day, 0:00:00
li=[]
while start_date<end_date:
li.append(start_date)
start_date+=a_day
# print(li)
# [datetime.date(2019, 3, 1), datetime.date(2019, 3, 2), datetime.date(2019, 3, 3), datetime.date(2019, 3, 4),
# datetime.date(2019, 3, 5), datetime.date(2019, 3, 6), datetime.date(2019, 3, 7), datetime.date(2019, 3, 8),
# .......
# datetime.date(2019, 3, 29), datetime.date(2019, 3, 30), datetime.date(2019, 3, 31)]
# 结束日期并不包含在这个日期范围内(事实上它是下个月的开始日期)。 这个和Python的 slice 与 range 操作行为保持一致,同样也不包含结尾。 # 使用生成器优化这段代码
def date_range(start,stop,step):
if start<stop:
yield start
li.append(start)
start+=step
date_range(start_date,end_date,timedelta(days=1)) # print(li)

补充:datetime

now = datetime.now()
print(now)
# 返回一个time结构
print(
now.timetuple()) # time.struct_time(tm_year=2019, tm_mon=3, tm_mday=5, tm_hour=9, tm_min=41, tm_sec=52, tm_wday=1, tm_yday=64, tm_isdst=-1)
# 返回一个date类型
print(now.date()) # 2019-03-05
# 返回一个time类型
print(now.time()) # 09:41:52.715695
# 当前星期几。星期一是0,星期于是6 注意这里是方法,不是属性哦。
print(now.weekday()) #
# 当前星期几。星期一是1,星期日是7注意这里是方法,不是属性哦。
print(now.isoweekday()) #
# 修改当前时间。比如修改成当月1号
print(now.replace(day=1)) # 2019-03-01 09:41:52.715695
past = datetime(2010, 11, 12, 13, 14, 15, 16) # 2010-11-12 13:14:15.000016
print(past)
# 进行比较运算返回的是timedelta类型
print(now - past) # 3034 days, 20:27:37.715679
# 转成字符串
strdatetime = now.strftime("%Y-%m-%d %H:%M:%S")
print(strdatetime) # 2019-03-05 09:41:52
# 字符串生成datetime对象
print(datetime.strptime(strdatetime, "%Y-%m-%d %H:%M:%S")) # 2019-03-05 09:41:52
返回指定年的某月:calendar
import calendar

def get_month(year, month):
return calendar.month(year, month) # 返回指定年的日历
def get_calendar(year):
return calendar.calendar(year) # 判断某一年是否为闰年,如果是,返回True,如果不是,则返回False
def is_leap(year):
return calendar.isleap(year) # 返回某个月的weekday的第一天和这个月的所有天数
def get_month_range(year, month):
return calendar.monthrange(year, month) # 返回某个月以每一周为元素的序列
def get_month_calendar(year, month):
return calendar.monthcalendar(year, month) # 返回指定年的日历
def get_calendar(year):
return calendar.calendar(year) # 判断某一年是否为闰年,如果是,返回True,如果不是,则返回False
def is_leap(year):
return calendar.isleap(year) # 返回某个月的weekday的第一天和这个月的所有天数
def get_month_range(year, month):
return calendar.monthrange(year, month) # (3, 31) # 返回某个月以每一周为元素的序列
def get_month_calendar(year, month):
return calendar.monthcalendar(year, month) year = 2013
month = 8
test_month = get_month(year, month)
print(test_month)
print('#' * 50)
# print(get_calendar(year))
print('{0}这一年是否为闰年?:{1}'.format(year, is_leap(year)))
print(get_month_range(year, month))
print(get_month_calendar(year, month))
"""
"""
August 2013
Mo Tu We Th Fr Sa Su
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 ##################################################
2013这一年是否为闰年?:False
(3, 31)
[[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24, 25], [26, 27, 28, 29, 30, 31, 0]]
"""

Python之计算当前月份的日期范围(calendar、datetime)的更多相关文章

  1. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...

  2. js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)

    本博客根据 开源中国作者清风徐不来 的文章 根据生日的月份和日期,一行代码计算星座的js小函数(转) 原文出自CSDN 无心的专栏 的文章,知识产权归原文作者所有! 点击查看原文:js 日期计算星座

  3. Python标准库02 时间与日期 (time, datetime包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...

  4. (转)Python标准库02 时间与日期 (time, datetime包)

    原文:http://www.cnblogs.com/vamei/archive/2012/09/03/2669426.html https://www.liaoxuefeng.com/wiki/001 ...

  5. Python时间与日期操作(datetime、time、calendar)

    相关模块 模块 说明 time time是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C++编写的几个类.例如,struct_time类 datetime datetime是一个 ...

  6. Python练习题 004:判断某日期是该年的第几天

    [Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? ---------------------------------------------- 这题竟然写了 28 行代码! ...

  7. JavaScript 计算指定月份有多少天

    用 js 画工作日历的时候,需要用 js 计算指定月份一共有多少天 在网上找了些方法,都比较繁琐,后来灵机一动,想到一个偷懒的办法,分享一下 一.原理分析 要想得到某月有多少天,只需要获取到当月最后一 ...

  8. Python 日期和时间 —— datetime

    Python 日期和时间 —— datetime Python提供了多个内置模块用于操作日期时间,如calendar,time,datetime.calendar用于处理日历相关 :time提供的接口 ...

  9. windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

随机推荐

  1. vim gdb使用

    vim 8.0以上 :packadd termdebug :termdebug shell gdb中运行help all查看所有命令帮助 显示汇编窗口 layout asm

  2. linux网络子系统调优

  3. count(1)、count(*)、count(字段)的区别

    count(1)和count(*): 都为统计所有记录数,包括null 执行效率上:当数据量1W+时count(*)用时较少,1w以内count(1)用时较少 count(字段): 统计字段列的行数, ...

  4. [Luogu2170]选学霸

    这一道题,由于他说,"如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议."而要求"既不让同学们抗议,又与原来的M尽可能接近".因此,我们要对实力相 ...

  5. 支付宝证书签名 PHP SDK

    PHP 接入支付宝证书方式签名以及验签 支付宝在 2019.10.25 日左右更新了新的 PHP SDK (v4.1.0). 之前的 PHP SDK(v3.4.2) 仅支持公钥方式加签.这次更新之后 ...

  6. boost Shared Memory

    Shared Memory Shared memory is typically the fastest form of interprocess communicatioin. It provide ...

  7. Vue学习笔记-组件通信-子传父(自定义事件)

    props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...

  8. Delphi fmx 找不到android设备解决办法

    刚接触到移动开发,很多不熟悉.配置好Android SDK后,​​如果​用模拟器来调试程序的话,那速度会让人崩溃,我用的Nexus7平板​​,插上电脑,开启USB调试,但奇怪在Delphi里就是找不到 ...

  9. mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    转:http://www.jb51.net/article/116402.htm 本文主要介绍的是关于mybatis通过接口查找对应mapper.xml及方法执行的相关内容,下面话不多说,来看看详细的 ...

  10. DTED文件结构

    注:DTED层级为1时,每列总计2414字节,包含1201个高度信息:DTED层级为2时,每列总计7214字节,包含3601个高度信息:DTED层级为3时,每列包含9001个高度信息. 每列数据前八个 ...