time 模块是很多人最早接触到的模块, 像 time.sleep(x)好像随处可见, 但是 time 模块里面的其他方法呢? 下面一起看一下 time 模块.
在 Python 中一般用这 3 种方式表示时间:
1. 时间戳, 包括 time()等函数
2. 格式化的时间字符 包括 asctime()等函数
3. 时间元组 包括 localtime()等函数
分别举例如下:
- print(time.time())
- >>> 1553149608.6831224
time 得到的时间单位是秒, 那么这个秒是怎么来的呢? 这是从 1970 年 1 月 1 日 0 点 0 分 0 秒开始计时, 一直到现在经历的秒数(不信可以自己算一下). 为什么是 1970? 这一年发生了很多大事, 比如 Unix 诞生了.
- print(time.localtime())
- >>> time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=27, tm_sec=24, tm_wday=3, tm_yday=80, tm_isdst=0)
- # 从左到右依次是当前时间的年, 月, 日, 时, 分, 秒, 一年中第几周, 一年中第几天, 夏令时
- print(time.localtime(time.time()))
- >>> time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=27, tm_sec=24, tm_wday=3, tm_yday=80, tm_isdst=0)
这里得到的是一个元组, 两个 print 得到的结果是一样的, 说明 localtime 中有一个默认参数, 就是 time.time(), 你也可以吧 time.time()拿到的时间 (1553149608.6831224) 当做参数, 得到的结果也是一样的.
- print(time.gmtime())
- >>> time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=6, tm_min=27, tm_sec=24, tm_wday=3, tm_yday=80, tm_isdst=0)
gmtime 和 localtime 的用法是一样的, 结果似乎也一样, 但仔细一看发现 tm_hour 好像少 8, 这是为什么呢? 因为我所在的中国位于东 8 区, gmtime 获取的时间是零度经线的时间, 没记错的话, 应该是英国的格林尼治天文台所在的经度, 也叫本初子午线嘛.
- print(time.mktime(time.localtime()))
- >>>1553150685.0
mktime 可以把得到的元组转化成时间戳.
- print(time.asctime())
- >>>Thu Mar 21 14:48:48 2019
- print(type(time.asctime()))
- >>><class 'str'>
- print(time.asctime(time.localtime()))
- >>>Thu Mar 21 14:48:48 2019
asctime 可以把时间元组转化成一个固定格式的字符串, 默认参数就是 time.localtime 拿到的元组.
- print(time.ctime())
- >>>Thu Mar 21 14:53:36 2019
- print(time.ctime(time.time()))
- >>>Thu Mar 21 14:53:36 2019
ctime 和 asctime 拿到的结果一样, 但是参数是时间戳, 默认就是 time.time()
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
- >>>2019-03-21 15:00:50
- print(time.strftime('%Y-%m-%d %X'))
- >>>2019-03-21 15:00:50
- print(time.strptime('2019-03-21 14:57:45','%Y-%m-%d %X'))
- >>>time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=57, tm_sec=45, tm_wday=3, tm_yday=80, tm_isdst=-1)
strftime 可以按一定的规则, 将时间元组转化成格式化字符串形式, 如果没有时间元组参数, 就默认为 localtime. 前面两个 print 结果是一样的, 就是说 %X 可以代替 %H:%M:%S, 这是一种简写. strptime 和 strftime 作用是相反的, 注意格式要和输入的格式化字符串一致, 不然就会报错了, format 默认为:"%a %b %d %H:%M:%S %Y".
到这里, 上面三种时间的转化关系已经出来了:
sleep 就不用讲了, 就是线程推迟指定时长后运行, 单位是秒, 正常理解为等待就行, time 模块基本就这些内容了.
来源: https://www.cnblogs.com/pengfy/p/10570403.html