在平时写python脚本时,时间是咱们常常用到的数据,好比:时间戳、前端展现的对应格式的时间等,在python中主要有三个和时间处理相关的模块:time、datetime、calendar,这篇文章主要帮你们整理这三个模块比较经常使用的方法。前端
格林威治时间, 十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测, 观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间做为标准来设定时间 。可是因为地球在椭圆轨道中运行速度不均匀,GMT时间会有偏差,所以如今已再也不做为标准时间使用。python
协调时间时,又称:世界标准时间,其计算方法更加精确。若是本地时间比UTC时间快,例如中国、蒙古国、新加坡、马来西亚、菲律宾、澳大利亚西部的时间比UTC快8小时,就会写做UTC+8,俗称东8区。相反,若是本地时间比UTC时间慢,例如夏威夷的时间比UTC时间慢10小时,就会写做UTC-10,俗称西10区。编程
夏令时间,在夏天,天亮的比较早,将时间所有调快一个小时,以达到提前使用日光的目的,从而削减灯光照明和耗电开支。中国也曾经实施过夏令时,可是由于不方便,于1992年暂停了夏令时,不过目前全世界还有几十个国家在使用夏令时。segmentfault
我整理了time的方法,发现其实time模块总体是围绕着三种状态来运转的,以下图所示:markdown
其中三种状态对应的数据格式以下:测试
# 获取时间戳 time_stamp = time.time() print(time_stamp) # 将时间戳转为时间元祖,从1970年1月1日 0点0分计算 print(time.gmtime(time_stamp)) # 将时间戳转为时间元祖 ,本地时间,若是在中国就是从1970年1月1日 8点0分计算 local_time_tuple = time.localtime(time_stamp) print(local_time_tuple)
这里须要注意:time.gmtime()是从UTC时间开始计算的,而time.localtime()是从当地时间开始计算的,好比:在中国是从UTC+8小时开始计算的,这是这两个方法主要的区别。spa
# 将时间元祖转成时间戳 time.mktime(local_time_tuple)
# 将时间元祖格式化, local_time_str = time.strftime("%Y-%m-%d %H:%M:%S", local_time_tuple) # 能够将时间元祖转换为简单格式的字符串 time.asctime(local_time_tuple)
帮你们整理了比较经常使用的格式,固然,这个不须要记忆,用的时候能够查文档,可是经常使用的格式仍是须要掌握的:线程
格式 | 含义 | 注释 |
---|---|---|
%Y | 十进制数表示的带世纪的年份 | |
%y | 十进制数 [00,99] 表示的没有世纪的年份 | |
%m | 十进制数 [01,12] 表示的月 | |
%d | 十进制数 [01,31] 表示的月中日 | |
%H | 十进制数 [00,23] 表示的小时(24小时制) | |
%I | 十进制数 [01,12] 表示的小时(12小时制) | |
%M | 十进制数 [00,59] 表示的分钟 | |
%S | 十进制数 [00,61] 表示的秒 | |
%W | 十进制数 [00,53] 表示的一年中的周数(星期一做为一周的第一天)做为。在第一个星期一以前的新年中的全部日子被认为是在第0周。 | |
%U | 十进制数 [00,53] 表示的一年中的周数(星期日做为一周的第一天)做为。在第一个星期日以前的新年中的全部日子都被认为是在第0周 | |
%w | 十进制数 [0(星期日),6] 表示的周中日 | |
%p | 本地化的 AM 或 PM | |
%Z | 时区名称(若是不存在时区,则不包含字符) |
# 将时间格式转换为时间元祖 time.strptime(local_time_str, "%Y-%m-%d %H:%M:%S")
相对于time模块,datetime模块更注重对时间和日期的运算,在其内部主要有六个class:code
test_dt = datetime.datetime.today() print(test_dt) print(test_dt.time()) print(test_dt.date()) print(test_dt.ctime()) print(test_dt.weekday()) print(test_dt.year) # 从时间戳加载时间 test_dt_stamp = datetime.datetime.fromtimestamp(time.time()) print(test_dt_stamp) # 从格列高利历序号加载时间,其中公元 1 年 1 月 1 日的序号为 1, # 每增长一天,对应的值就增长1,好比公元1年1月2日的序号是2。 test_dt_dinal = datetime.datetime.fromordinal(1) print(test_dt_dinal)
其中须要注意:orm
这个比较好理解,datetime中的对象是能够直接被比较的,不过大多数状况下,好比:
# 由两个时间戳获取datetime时间,从而比较他们的大小 test_stmap1 = datetime.datetime.fromtimestamp(time.time() - 4000000) test_stmap2 = datetime.datetime.fromtimestamp(time.time()) if test_stmap2 > test_stmap1: print("test_stmap2 is bigger")
这主要是用到了咱们前面提到了类:timedelta,它能够表示一个时间差值,好比:几天、几小时、甚至几周。而后咱们能够找个时间基准来进行时间计算。好比,下面的例子,计算了昨天、今天、明天的时间:
# 计算昨天、今天、明天的时间 test_today = datetime.datetime.today() print("today:", test_today) one_day = datetime.timedelta(days=1) yesterday = test_today - one_day tomorrow = test_today + one_day print("yesterday:", yesterday) print("tomorrow:", tomorrow)
初次以外,timedelta还支持浮点型数字的运算:
# 浮点型运算 one_day = datetime.timedelta(days=1, hours=1) one_point_five_day = one_day * 1.5 print(one_point_five_day)
这里须要注意的是:timedelta能够有多个参数,好比datetime.timedelta(days=1, hours=1, seconds=20)。那么和1.5相乘,每一个参数都会和1.5相乘,好比上面例子的运行结果是:1 day, 13:30:00。
calendar类主要用于对日历的操做,我这里为你们整理了它比较经常使用的方法,掌握这些方法,够你在工做中使用了。
# 打印一年的日历 calen = calendar.calendar(2020) print(calen) # 打印一个月的日历 calen = calendar.month(2020,1) print(calen) # 打印的结果以下: January 2020 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
看着是否是挺炫的,仅用一行代码就能打印日历。
# 获取指定的年月日是星期几。 calendar.weekday(2020, 1, 7) # 根据指定日期获取时间信息,返回两个值,第一个值表示1号是星期几,第二个值是这个月有多少天 calendar.monthrange(2019, 1)
# 检测某一年是不是闰年 calendar.isleap(2019) # 检测指定年限内闰年的数量 calendar.leapdays(2008, 2020)
python的时间处理模块,能够方便的帮你对时间进行处理,文中列出来比较高频使用的方法,固然你们若是感兴趣,彻底能够去官方文档上翻看其余的方法(从前一段时间开始,python提供了中文的文档)。
关注【公众号:软件测试布道师】,回复【python】,便可获取【python自动化及编程实践资料】