一、计算两个日期内的所有月

def get_month_interval(start_str, end_str):
start_year, start_month = list(map(int, start_str.split('-')))
end_year, end_month = list(map(int, end_str.split('-')))
result = []
for year in range(start_year, end_year + 1):
year_str = str(year)
if year == end_year and year == start_year: # 当前年份 =结束年份 and 当前年份 = 起始年份
for month in range(start_month, end_month):
date_str = year_str + '-' + str(month)
result.append(date_str)
elif year < end_year and year == start_year: # 当前年份<结束年份 and 当前年份 = 起始年份
for month in range(start_month, 13):
date_str = year_str + '-' + str(month)
result.append(date_str)
elif year < end_year and year != start_year: # 当前年份<结束年份 and 当前年份 != 起始年份
for month in range(1, 13):
date_str = year_str + '-' + str(month)
result.append(date_str)
else: # 当前年份 = 结束年份 and 当前年份 != 起始年份
for month in range(1, end_month + 1):
date_str = year_str + '-' + str(month)
result.append(date_str)
return result

测试结果如下:

>>> get_month_interval('2015-11','2016-2')
['2015-11', '2015-12', '2016-1', '2016-2']

二、计算两个日期之间的差值

def get_date_diff(start_str, end_str):
import datetime
start = datetime.datetime.strptime(start_str, '%Y-%m-%d %H:%M:%S.%f')
end = datetime.datetime.strptime(end_str, '%Y-%m-%d %H:%M:%S.%f')
diff = end - start
# 相差天数
print('相差天数:', diff.days)
# 相差秒数
print('相差秒数:', diff.seconds)
# 相差微秒数
print('相差微秒数:', diff.microseconds)

测试结果如下:

>>> get_date_diff('2016-1-25 23:59:59.100','2016-2-27 22:58:58.50')
相差天数: 32
相差秒数: 82739
相差微秒数: 400000

三、计算当前时间延后指定时间的日期

>>> compute_date(days=1,weeks=2)
2016-11-19 15:24:41.203940
2016-12-04 15:24:41.203940

测试结果如下:

#计算经过两周一天之后的日期
>>> compute_date(days=1,weeks=2)
2016-11-19 15:24:41.203940
2016-12-04 15:24:41.203940

四、其他

# 把UTC时间转本地时间

from datetime import datetime
from dateutil import tz # METHOD 1: Hardcode zones:
from_zone = tz.gettz('UTC')
to_zone = tz.gettz('America/New_York') # METHOD 2: Auto-detect zones:
from_zone = tz.tzutc()
to_zone = tz.tzlocal() # utc = datetime.utcnow()
utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S') # Tell the datetime object that it's in UTC time zone since
# datetime objects are 'naive' by default
utc = utc.replace(tzinfo=from_zone) # Convert time zone
central = utc.astimezone(to_zone)

  

五、时间日期格式化符号

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12) 
%M 分钟数(00=59)
%S 秒(00-59)
%f  毫秒(小数点后6位)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

六、相关模块

datetime模块

•datetime.date:表示日期的类。常用的属性有year, month, day; 
•datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond; 
•datetime.datetime:表示日期时间。 
•datetime.timedelta:表示时间间隔,即两个时间点之间的长度。 
•datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册) 
注:上面这些类型的对象都是不可变(immutable)的。

date类 
date类表示一个日期。日期由年、月、日组成(地球人都知道~~)。date类的构造函数如下:

class datetime.date(year, month, day):参数的意义就不多作解释了,只是有几点要注意一下:

•year的范围是[MINYEAR, MAXYEAR],即[1, 9999]; 
•month的范围是[1, 12]。(月份是从1开始的,不是从0开始的~_~); 
•day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天; 
date类定义了一些常用的类方法与类属性,方便我们操作:

•date.max、date.min:date对象所能表示的最大、最小日期; 
•date.resolution:date对象表示日期的最小单位。这里是天。 
•date.today():返回一个表示当前本地日期的date对象; 
•date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象; 
•datetime.fromordinal(ordinal):将Gregorian日历时间转换为date对象;(Gregorian Calendar:一种日历表示方法,类似于我国的农历,西方国家使用比较多,此处不详细展开讨论。)

date提供的实例方法和属性:

•date.year、date.month、date.day:年、月、日; 
•date.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) 
•date.timetuple():返回日期对应的time.struct_time对象; 
•date.toordinal():返回日期对应的Gregorian Calendar日期; 
•date.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; 
•data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; 
•date.isocalendar():返回格式如(year,month,day)的元组; 
•date.isoformat():返回格式如'YYYY-MM-DD'的字符串; 
•date.strftime(fmt):自定义格式化字符串。在下面详细讲解。

python 日期计算案例的更多相关文章

  1. Python日期计算

    Python源代码如下: # -*- coding: UTF-8 -*- """ 简述:要求输入某年某月某日 提问:求判断输入日期是当年中的第几天? Python解题思路 ...

  2. python 日期计算

    from datetime import timedelta,datetime import time tdy = datetime.today() tdy = tdy.strftime(" ...

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

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

  4. python 日期相关的各种操作总结

    用 Python 做项目时,经常会遇到与日期转换相关,日期计算相关的功能,动不动就要去查python手册,感觉麻烦,因此把自己常用的一些东西,总结了一下,总体说来到目前为止遇到如下一些需求: 1. 用 ...

  5. Python日期时间函数处理

    所有日期.时间的 api 都在datetime模块内. 1 日期的格式化输出 datetime => string import datetime now = datetime.datetime ...

  6. Python 日期和时间(转)

    Python 日期和时间 Python程序能用很多方式处理日期和时间.转换日期格式是一个常见的例行琐事.Python有一个 time 和 calendar 模组可以帮忙. 什么是Tick? 时间间隔是 ...

  7. (转)Python 日期和时间

    转自http://www.runoob.com/python/python-date-time.html Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见 ...

  8. Python 日期时间处理模块学习笔记

    来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...

  9. 【310】◀▶ Python 日期和时间

    参考: python 时间日期计算 Python 日期和时间(菜鸟教程) 8.1. datetime — Basic date and time types python中datetime模块中dat ...

随机推荐

  1. Programming Language A 学习笔记(二)

    1. 语法糖--元组的"名称引用"与"位置引用": (e1,...,en) <=> {1=e1,...,n=en} 类型:t1 * - * tn & ...

  2. 队列的JS实现

    队列和栈相似,都是对插入和删除操作的部位做了限制特殊的线性表.在队列中,只能从一头删除节点,这一头叫做队首:而另一端只能做插入操作,这一头叫做队尾.很容易理解,队列是一个"先进先出" ...

  3. 数据泵Expdp和Impdp

    一.数据泵导入导出技术 1.结构 2.目录对象 二.EXPDP参数 1.attach 2.content 3.directory 4.dumpfile 5.estimate 6.estimate_on ...

  4. 使用C#在CEF中拦截并响应请求

    一.前言 忙里偷闲,研究了一下如何在CEF中拦截请求,并作出响应.这个功能对某些需要修改服务器响应的需求来说必不可少,可以直接读取本地文件作为响应内容. C#的CEF封装项目有很多,我使用的是Chro ...

  5. 【贪心】HDU 1257

    HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...

  6. 经典排序算法 – 插入排序Insertion sort

    经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...

  7. 使用配置文件定义ADO.NET 的连接字符串

    最近一直在学习ADO.NET的相关知识,发现要对数据库操作的地方都要先创建一个连接字符串: string constr ="Data Source=(local);Initial Catal ...

  8. Android面试技巧 找安卓开发工作同学可以看看!

    马上就要学完安卓毕业了,最近总想写点什么.今天把自己这段时间的学习心得以及面试时的经验分享给大家: 关于我为什么选择学习安卓并且来华清远见学习,说来话长,但是我要长话短说!首先我以前的实习工作工资太低 ...

  9. USER STORIES AND USE CASES - DON’T USE BOTH

    We’re in Orlando for a working session as part of the Core Team building BABOK V3 and over dinner th ...

  10. 使用post方式提交表单如何获取图片数据及其他文本参数[NodeJS]

    当POST方式提交包含图片的表单时,如上传图片时,需要在<form>字段需要添加参数enctype="multipart/form-data",表明以二进制方式传输数据 ...