转载自:Python时间与日期操作(datetime、time、calendar) - 阳光宝贝-沐沐 - 博客园
相关模块
UTC(CoordinatedUniversal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。
DST(DaylightSaving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时
时间元组
Python时间函数将时间处理为9个数字的元组,各个索引所代表的字段及取值范围如下所示:
1 year (four digits, e.g. )2 month (1-12)3 day (1-31)4 hours (0-23)5 minutes (0-59)6 seconds (0-59)7 weekday (0-6, Monday is 0)8 Julian day (day in the year, 1-366)9 #夏令时格式,0:正常格式,1:夏令时格式,-1:根据当前的日期时间格式来判定10 DST (Daylight Savings Time) flag (-1, 0 or 1)
上面的元组相当于struct_time结构。此结构具有以下属性:
可用如下图示表示:
time模块
time模块,它提供了处理时间和表示之间转换的功能。help(time)之后可以知道time有2种时间表示形式:
1、时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。
2、元组格式表示法,这个元组有9个整型内容。分别表示不同的时间含义。
时间字符串支持的格式符号:
1 格式 含义 备注2 %a 本地(locale)简化星期名称3 %A 本地完整星期名称4 %b 本地简化月份名称5 %B 本地完整月份名称6 %c 本地相应的日期和时间表示7 %d 一个月中的第几天(01 - 31)8 %H 一天中的第几个小时(24小时制,00 - 23)9 %I 第几个小时(12小时制,01 - 12)10 %j 一年中的第几天(001 - 366)11 %m 月份(01 - 12)12 %M 分钟数(00 - 59)13 %p 本地am或者pm的相应符14 %S 秒(01 - 61)15 %U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。16 %w 一个星期中的第几天(0 - 6,0是星期天)17 %W 和%U基本相同,不同的是%W以星期一为一个星期的开始。18 %x 本地相应日期19 %X 本地相应时间20 %y 去掉世纪的年份(00 – 99)21 %Y 完整的年份22 %Z 时区的名字(如果不存在为空字符)23 %% ‘%’字符
注意:
1、“%p”只有与“%I”配合使用才有效果。
2、文档中强调确实是0-61,而不是59,闰年秒占两秒
3、当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%和%W才会被计算
time模块重要属性
time模块实例
1 import time2 3 ticks = time.time()4 5 # 这种格式不能表示在时代(1970年1月1日上午12:00)之前的日期。只能表示之后日期并且截止点为3038年的某个时刻,在未来的日子也不能以这种方式表示6 print("Number of ticks since 12:00am, January 1, 1970:", ticks)7 8 # 获取当前本地时间9 localtime =time.localtime(time.time())10 print("Local current time :", localtime)11 12 # 当前时间格式化13 curtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())14 print(curtime)15 # 也可以使用asctime()进行时间格式化16 print(time.asctime(localtime))
结果:
Number of ticks since 12:00am, January 1, 1970: 1541039190.1566076Local current time : time.struct_time(tm_year=, tm_mon=11, tm_mday=1, tm_hour=10, tm_min=26, tm_sec=30, tm_wday=3, tm_yday=305, tm_isdst=0)-11-01 10:26:30Thu Nov 1 10:26:30
Calendar
模块
calendar模块提供与日历相关的功能,包括为给定的月份或年份打印文本日历的功能。
默认情况下,日历将星期一作为一周的第一天,将星期日作为最后一天。如果想要更改这个,可调用calendar.setfirstweekday()函数设置修改。
以下是calendar模块可用的功能函数列表
calendar模块实例
1 import calendar2 3 # 获取一个月的日历4 cal = calendar.month(, 10);5 print("Here is the calendar:");6 print(cal);
结果:
Here is the calendar:October Mo Tu We Th Fr Sa Su1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 30 31
datetime
模块
datetime是Python处理日期和时间的标准库。需要注意的是,datetime是一个模块,这个模块里面有datetime类,此外常用的还有date类,以及time类。
datetime模块使用实例:
1 from datetime import date2 from datetime import datetime3 from datetime import timedelta4 5 # 计算两个日期相差多少天6 d1 = date(, 10, 18);7 d2 = date(, 12, 31);8 9 print("(, 10, 18)与(, 12, 31)相差:", (d1 - d2).days, "天!");10 11 # 获取两个日期时间的时间差12 time1 = datetime(, 1, 13, 12, 0, 0);13 time2 = datetime.now();14 differtime = (time1 -time2).total_seconds();15 print("(,1,13,12,0,0)与当前时间相差:", differtime, "秒!");# 输出结果16 17 # 当前日期18 curdate = date.today();19 print("curdate =",curdate);20 21 # 计算十天之后的日期时间22 nowday = datetime.now();23 # timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h))24 # 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数25 # 前几天时刻,用减法。 后几天时刻,则用当前时间加上timedelta(days = d, hours= h)26 lastday = nowday + timedelta(days=10);27 print(str(lastday));28 print(lastday.ctime());# ctime() 返回一个表示日期和时间的字符串。29 30 # 查看某一天是今年的第几天和第几周31 testday = date(, 8, 31);32 print(testday.isocalendar());# isocalendar() 函数返回三元组 分别为:年份,周数,周几33 print(testday.timetuple());# timetuple() 返回时间元祖
结果:
(, 10, 18)与(, 12, 31)相差: 291 天!(,1,13,12,0,0)与当前时间相差: 6311998.358155 秒!curdate = -11-01-11-11 10:40:01.641845Sun Nov 11 10:40:01 (, 35, 4)time.struct_time(tm_year=, tm_mon=8, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)
其他程序实例:计算程序运行时间
1 # 统计程序运行时间的程序 2 import time3 # datetime是一个模块,模块里面有一个datetime类,所以可以from datetime importdatetime4 import datetime5 6 # 方法一(性能最差)7 starttime = datetime.datetime.now()8 time.sleep(2)9 endtime = datetime.datetime.now() 10 print((endtime - starttime).seconds)11 12 # 方法二13 start = time.time()14 time.sleep(2)15 end = time.time()16 print(end- start)17 18 # 方法1和方法2都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。19 20 # 推荐方法3 (只计算了程序运行的CPU时间)21 first = time.clock()22 time.sleep(2)23 second = time.clock();24 print(second- first)25 26 27 # 要实现跨平台的精度性,也可以使用timeit 来代替time.28 import timeit29 30 starttime2 = timeit.default_timer()31 time.sleep(2)32 endtime2 = timeit.default_timer()33 print(str(endtime2 - starttime2))
结果:
22.00091147422790532.00072986041419652.000633781133109
如果觉得《Python时间与日期操作(datetime time calendar)》对你有帮助,请点赞、收藏,并留下你的观点哦!