一、了解历史
1.计算机元年:1970年1月1日 00时00分00秒
以前计算机操作系统是32位,一个int类型的数据是32位,它表示的范围是:-2147483648 ~ 2147483647,用它来代表秒钟数进行计算:只有68.1年的时间。也就是说用这个数来表示时间如果从公元元年开始算显然不够用,所以综合当时UNIX的发展历程,取了1970年1月1日0时0分0秒做为计算机元年,用于计时的开始。
2.2038年问题
32位表示最后时间到了2038年1月19日03时14分07秒,便达到了最大值,过了这个时间点,数据越界变成最小值:-2147483648。代表的时间就是1901年12月13日20时45分52秒,出现时间回归的现象,很多依赖时间的软件就会出现异常。发展所导致的问题只能通过进一步发展解决,随着64为操作系统的普及,现在用64位操作 系统可以表示到292277026596年12月4日15时30分08秒了。也就是2900亿年以后。
3.UTC时间
在1884年,为了克服时间上的混乱,在华盛顿召开了一次国际经度会议(又称国际子午线会议),当时将全球划分为24个时区。规定英国(格林尼治天文台)为中时区,每个时区跨15经度,时间正好时1小时,最后东、西的第12时区各跨7.5度。至于为什么英国时0时区,因为当时人家牛p,是日不落。
二、常用函数
使用import time来调用time模块
1. time.time()
返回从计算机元年到现在的时间(以秒为单位)。如果系统时钟提供小数秒,则可能会出现小数秒
print(time.time()) # 输出:1638348236.3917518
2. time.thread_time()
分析线程时间:内核和用户空间CPU时间之和
print(time.thread_time()) # 输出:0.0625
3. time.clock()
返回自进程开始或之后的CPU时间或实时时间对clock()的第一次调用。这与系统的精度一样高。
在Python 3.3中,time.clock已被弃用,并将从Python 3.8中删除:改用time.perf_counter或time.process_time
print(time.clock()) # 输出:0.0338435
4. time.sleep(secnd)
将执行延迟给定的秒数,就是让程序睡一会再跑,具体睡多久,括号里面给具体时间
print(time.sleep(2)) # 括号里是2,程序睡两秒再执行,打印会显示None
5. time.time_ns()
返回自历元以来的当前时间(以纳秒为单位)
print(time.time_ns()) # 输出:1638348716267450500
6. time.gmtime(second)
括号里不加参数,显示当前的格林尼治时间,也就是UTC时间
括号里加参数,显示从计算机元年过了(参数)秒的时间
print(time.gmtime()) 输出:time.struct_time(tm_year=1974, tm_mon=12, tm_mday=15, tm_hour=1, tm_min=6, tm_sec=0, tm_wday=6, tm_yday=349, tm_isdst=0)
print(time.gmtime(10000000)) 输出: time.struct_time(tm_year=1970, tm_mon=4, tm_mday=26, tm_hour=17, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=116, tm_isdst=0)
7. time.ctime(second)
把从计算机元年起的时间(秒)转换为本地时间的字符串。
不加参数返回此时此刻的时间
print(time.ctime(123123)) # 输出:Fri Jan 2 18:12:03 1970
print(time.ctime()) # 输出:Wed Dec 1 18:53:33 2021
8.time.strftime('')
根据格式规范将时间元组转换为字符串
# print(time.strftime('%Y-%m-%d %H:%M:%S %z %a %A %b %B ---%c--- %I %p'))
# 输出:2021-12-01 19:12:47 +0800 Wed Wednesday Dec December ---Wed Dec 1 19:12:47 2021--- 07 PM
%Y 年
%m 月
%d 日
%H 小时
%M 分钟
%S 秒
%z 在哪个时区
%a 缩写的星期几
%A 完整的星期几
%b 区域设置的缩写月份名称
%B 区域设置的完整月份名称
%c 语言环境的适当日期和时间表示
%I 小时(12小时时钟)
%p 语言环境相当于AM或PM
9. time.strptime('','')
将其转化为机构化时间,前后必须对应
print(time.strptime('2021-12-1','%Y-%m-%d')) # 将其转化为机构化时间,前后必须对应
a = time.strptime('2021-12-1','%Y-%m-%d')
print(a.tm_year) # 可以通过这种方式去取
# 输出:2021
10. time.localtime()
返回结构化时间,里面加参数,就从计算机元年开始算
print(time.localtime()) # 返回结构化时间,里面加参数,就从计算机元年开始算
a = time.localtime()
print(a.tm_year) # 可以通过这种方式去取
# 输出:2021
11. time.mktime()
将本地时间中的时间元组转换为时间戳(自历元起的秒数)
print(time.mktime(time.localtime())) # 输出: 1638358856.0
12. datatime模块
import datetime
a = datetime.datetime.now()
print(a) # 输出:2021-12-01 19:43:11.598313