time
无论在什么编程语言中,我们几乎都要用到时间。
在Python中,与时间处理相关的内置模块包含如下:
但此次本章主要讲解time
模块,注意基于python2.7+版本。
一. 时间表示
- 在Python中,我认为主要有四种方式来表示时间,分别是
时间戳
、24字节时间
、字符串时间
和结构化时间
。注意支持的时间范围是1970年之后及2038年之前。
-
时间戳(timestamp):最适于做时间运算,通常格式为浮点型
1545988001.381185
, 可以通过time.time()获得。 -
24字节时间:结构为星期、月、日、时间的特定格式字符串,例如
'Wed Jan 2 10:15:00 2019'
,可以通过time.ctime()获得。 -
字符串时间(string_time):在保存log的文档里面常常用到,一般作为每条打印的前缀,例如
2018-12-28 08:00:00
,可以通过time.strftime('%Y-%m-%d %H:%M:%S')获得。 -
结构化时间(struct_time):一个包含了年月日时分秒的九元元组,例如
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=28, tm_hour=16, tm_min=44, tm_sec=58, tm_wday=4, tm_yday=362, tm_isdst=0)
,可以通过time.localtime()获得。
二. 时间戳(timestamp)
主要通过time.time()方法获取。
import time
start = time.time()
end = time.time()
print end-start
6.61431217194
print start, end
1546393672.63 1546393679.24
结果为浮点型,可以加减运算。
三. 24字节时间
主要通过time.ctime()方法获取。
import time
print time.ctime()
Wed Jan 2 10:15:00 2019
四. 字符串时间(string_time)
主要通过time.strftime('%Y-%m-%d %H:%M:%S')方法获取。
import time
print time.strftime('%Y-%m-%d %H:%M:%S')
2018-12-28 17:20:32
其中的空格、短横线和冒号都是美观修饰符号,真正起控制作用的是百分符。含义如下,但注意大小写的区别:
格式 | 含义 |
---|---|
%a | 本地星期名称的简写(如星期四为Thu) |
%A | 本地星期名称的全称(如星期四为Thursday) |
%b | 本地月份名称的简写(如八月份为agu) |
%B | 本地月份名称的全称(如八月份为august) |
%c | 本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06) |
%d | 一个月中的第几天(01 - 31) |
%f | 微秒(范围0.999999) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%I | 第几个小时(12小时制,0 - 11) |
%j | 一年中的第几天(001 - 366) |
%m | 月份(01 - 12) |
%M | 分钟数(00 - 59) |
%p | 本地am或者pm的标识符 |
%S | 秒(00 - 61) |
%U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。 |
%w | 一个星期中的第几天(0 - 6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。 |
%x | 本地相应日期字符串(如15/08/01) |
%X | 本地相应时间字符串(如08:08:10) |
%y | 去掉世纪的年份(00 - 99)两个数字表示的年份 |
%Y | 完整的年份(4个数字表示年份) |
%z | 与UTC时间的间隔(如果是本地时间,返回空字符串) |
%Z | 时区的名字(如果是本地时间,返回空字符串) |
%% | ‘%’字符 |
五. 结构化时间(struct_time)
主要通过time.localtime()方法获取。
import time
print time.localtime()
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=28, tm_hour=16, tm_min=44, tm_sec=58, tm_wday=4, tm_yday=362, tm_isdst=0)
结构化时间元组共有9个元素,按顺序排列如下表:
序号 | 字段 | 取值范围 |
---|---|---|
0 | tm_year(4位数年) | 2018 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(分钟) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 61(60或61是闰秒) |
6 | tm_wday(一周的第几日) | 0 - 6(0表示周一) |
7 | tm_yday(一年的第几日) | 1 - 366 |
8 | tm_isdst(夏令时) | -1, 0, 1, -1是决定是否为夏令时的旗帜 |
六. time模块常用方法
- time.asctime([t])
将一个结构化时间(struct_time)转换为24字节时间,t默认为time.localtime()。
import time
print time.asctime()
Wed Jan 2 10:36:42 2019
- time.ctime([s])
将一个时间戳转换为本地时间
的24字节时间,s默认为time.time()。
import time
t = time.time()
print time.ctime()
Wed Jan 2 10:33:58 2019
print time.ctime(t-3600)
Wed Jan 2 09:33:43 2019
- time.gmtime([s])
将一个时间戳转换为UTC时区
的结构化时间(struct_time),s默认为time.time()。
import time
print time.gmtime()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=2, tm_hour=2, tm_min=9, tm_sec=9, tm_wday=2, tm_yday=2, tm_isdst=0)
- time.localtime([s])
将一个时间戳转换为当前时区
的结构化时间(struct_time),s默认为time.time()。
import time
print time.localtime()
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=28, tm_hour=16, tm_min=44, tm_sec=58, tm_wday=4, tm_yday=362, tm_isdst=0)
- time.mktime(t)
将一个结构化时间(struct_time)转化为时间戳。
import time
print time.mktime(time.localtime())
1546406111.0
- time.strftime(format[, t])
将一个结构化时间(struct_time)转化为字符串时间(string_time), t默认为time.localtime()
import time
print time.strftime('%Y-%m-%d %H:%M:%S')
'2018-12-28 17:20:32'
- time.strptime(string[, format])
将一个字符串时间(string_time)转化为结构化时间(struct_time)。注意string和format的格式一致。
import time
string = '2019-01-01 12:00:00'
print time.strptime(string,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)
- time.time()
获得当前系统的时间戳。 - time.sleep(s)
程序沉睡指定的时间, s单位为秒, 可赋值整形,亦可浮点型。 - time.clock()
返回执行当前程序的CPU时间。在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间,而第二次之后的调用是自第一次调用以后到现在的运行时间。
七. 时间格式之间的转换
根据以上方法,可以总结出以下的转换关系图。
网友评论