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

简介

time模块与datetime模块区别

time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致。与time模块相比,datetime模块提供的接口更直观、易用,功能也更加强大。

UTC与DST:

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。

DST(Daylight Saving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时

时间元组

Python时间函数将时间处理为9个数字的元组,各个索引所代表的字段及取值范围如下所示:

索引字段
04位数,表示年份2018,2019…
1月份1 ~ 12
2日期1 ~ 31
3小时0 ~ 23
4分钟0 ~ 59
50 ~ 61(60或61是闰秒)
6星期几0 ~ 6(0是星期一)
7一年的第几天1 ~ 366(朱利安日)
8夏令时1,0,1,-1是决定是否为夏令时的旗帜
python时间元组

上面的元组相当于struct_time结构。此结构具有以下属性:

索引字段
0tm_year2018,2019…
1tm_mon 1 ~ 12
2tm_mday1 ~ 31
3tm_hour0 ~ 23
4tm_min0 ~ 59
5tm_sec0 ~ 61(60或61是闰秒)
6tm_wday0 ~ 6(0是星期一)
7tm_yday1 ~ 366(朱利安日)
8tm_isdst1,0,1,-1是决定是否为夏令时的旗帜
python struct_time结构

可用如下图示表示:

图片[1] - Python时间与日期操作(datetime、time、calendar) - 正则时光
python时间元组和struct_time结构对照关系

time模块

time模块,它提供了处理时间和表示之间转换的功能。

1.获取当前时间

图片[2] - Python时间与日期操作(datetime、time、calendar) - 正则时光

注:在python3.8中,time模块下不支持clock,改成time.perf_counter()即可解决错误。

2.时间戳与时间元组转换

time.ctime([secs])把时间戳转化为时间元组
time.gmtime([secs])把时间戳转化为格林威治天文时间下的时间元组
time.mktime(tupletime)把时间元组转化为时间戳
时间戳与时间元组转换

3.获取格式化的时间

你可以根据需求选取各种格式,把时间元组格式化:

图片[3] - Python时间与日期操作(datetime、time、calendar) - 正则时光
图片[4] - Python时间与日期操作(datetime、time、calendar) - 正则时光

4.其它方法和属性

time.clock()用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
由于该方法依赖操作系统,在 Python 3.3 以后不被推荐,而在 3.8 版本中被移除,需使用下列两个函数替代。
time.perf_counter() # 返回系统运行时间
time.process_time() # 返回进程运行时间
time.sleep(secs)暂停时间秒
time.tzset()根据环境变量TZ重新初始化时间相关设置。
图片[5] - Python时间与日期操作(datetime、time、calendar) - 正则时光

Datetime模块

datetime模块包含以下类classs。

图片[6] - Python时间与日期操作(datetime、time、calendar) - 正则时光
date(cls, year, month=None, day=None)
time(cls, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
datetime(cls, year, month=None, day=None, hour=0, minute=0, second=0,microsecond=0, tzinfo=None, *, fold=0)
timedelta(cls, days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0)

常用操作:

from datetime import date
from datetime import datetime
from datetime import timedelta
 
# 计算两个日期相差多少天
d1 = date(2018, 10, 18);
d2 = date(2017, 12, 31);
 
print("(2018, 10, 18)与(2017, 12, 31)相差:", (d1 - d2).days, "天!");
 
# 获取两个日期时间的时间差
time1 = datetime(2019, 1, 13, 12, 0, 0);
time2 = datetime.now();
differtime = (time1 -time2).total_seconds();
print("(2019,1,13,12,0,0)与当前时间相差:", differtime, "秒!");# 输出结果
  
# 当前日期
curdate = date.today();
print("curdate =",curdate);
  
# 计算十天之后的日期时间
nowday = datetime.now();
# timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h))
# 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数
# 前几天时刻,用减法。  后几天时刻,则用当前时间加上timedelta(days = d, hours= h)
lastday = nowday + timedelta(days=10);
print(str(lastday));
print(lastday.ctime());# ctime()  返回一个表示日期和时间的字符串。
  
# 查看某一天是今年的第几天和第几周
testday = date(2017, 8, 31);
print(testday.isocalendar());# isocalendar() 函数返回三元组    分别为:年份,周数,周几
print(testday.timetuple());# timetuple()  返回时间元祖

日历(Calendar)模块

calendar模块提供与日历相关的功能,包括为给定的月份或年份打印文本日历的功能。

以下是calendar模块可用的功能函数列表

序号函数描述
1Calendar(year,w = 2,l = 1,c = 6)返回一个具有年份日历的多行字符串格式化为三列,以c个空格分隔。 w是每个日期的字符宽度;每行的长度为21 * w + 18 + 2 * c,l是每周的行数。
2firstweekday( )返回当前设置每周开始的星期。默认情况下,当日历首次导入时设置为:0,表示为星期一。
3isleap(year)如果给定年份(year)是闰年则返回True;否则返回:False。
4leapdays(y1,y2)返回在范围(y1,y2)内的年份中的闰年总数。
5Month(year,month,w = 2,l = 1)返回一个多行字符串,其中包含年份月份的日历,每周一行和两个标题行。 w是每个日期的字符宽度;每行的长度为7 * w + 6。 l是每周的行数
6Monthcalendar(year,month)返回int类型的列表。每个子列表表示一个星期。年份月份以外的天数设置为0;该月内的日期设定为月份的第几日:1 ~ 31
7Monthrange(year,month)返回两个整数。第一个是年度月(month)的星期几的代码;第二个是当月的天数。表示星期几为0(星期一)至6(星期日);月份是1到12
8Prcal(year,w = 2,l = 1,c = 6)类似于:calendar.calendar(year,w,l,c)的打印
9Prmonth(year,month,w = 2,l = 1)类似于:calendar.month(year,month,w,l)的打印
10setfirstweekday(weekday)将每周的第一天设置为星期几的代码。星期几的代码为0(星期一)至6(星期日)。
11timegm(tupletime)time.gmtime的倒数:以时间元组的形式接受时刻,并返回与从时代(epoch)开始的浮点数相同的时刻。
12weekday(year,month,day)返回给定日期的星期几的代码。星期几的代码为0(星期一)至6(星期日);月数是1(1月)到12(12月)。
calendar模块可用的功能函数列表

时间格式化符号

  • %a 星期的简写。如 星期三为Web
  • %A 星期的全写。如 星期三为Wednesday
  • %b 月份的简写。如4月份为Apr
  • %B月份的全写。如4月份为April
  • %c:  日期时间的字符串表示。(如: 04/07/10 10:43:39)
  • %d:  日在这个月中的天数(是这个月的第几天)
  • %f:  微秒(范围[0,999999])
  • %H:  小时(24小时制,[0, 23])
  • %I:  小时(12小时制,[0, 11])
  • %j:  日在年中的天数 [001,366](是当年的第几天)
  • %m:  月份([01,12])
  • %M:  分钟([00,59])
  • %p:  AM或者PM
  • %S:  秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
  • %U:  周在当年的周数当年的第几周),星期天作为周的第一天
  • %w:  今天在这周的天数,范围为[0, 6],6表示星期天
  • %W:  周在当年的周数(是当年的第几周),星期一作为周的第一天
  • %x:  日期字符串(如:04/07/10)
  • %X:  时间字符串(如:10:43:39)
  • %y:  2个数字表示的年份
  • %Y:  4个数字表示的年份
  • %z:  与utc时间的间隔 (如果是本地时间,返回空字符串)
  • %Z:  时区名称(如果是本地时间,返回空字符串)
  • %%:  %% => %
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享