Python time 库

Time

概念

1
import time
  • **时间戳:**格林威治时间 1970 年 01 月 01 日 00 分 00 秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数,是个数字。
  • Python 中获取时间的常用方法是,先得到时间戳,再将其转换成想要的时间格式。
  • **元组 struct_time:**日期、时间是包含许多变量的,所以在 Python 中定义了一个元组 struct_time 将所有这些变量组合在一起,包括:年、月、日、小时、分钟、秒等。

时间获取函数

time()

获取当前时间戳,返回浮点数

1
2
3
4
time.time()

<<
	1610015368.4228694

ctime()

获取当前时间并以易读方式表示,返回字符串

1
2
3
4
time.ctime()

<<
	'Thu Jan  7 18:30:37 2021'

gmtime()

获取当前时间并以计算机可处理的格式表示,返回元组 struct_time

1
2
3
4
time.gmtime()

<<
	time.struct_time(tm_year=2021, tm_mon=1, tm_mday=7, tm_hour=10, tm_min=32, tm_sec=36, tm_wday=3, tm_yday=7, tm_isdst=0)

mktime()

把时间元组,转换为秒

1
2
3
time.mktime(time.gmtime()) 
<<
	1609986979.0

asctime()

把时间元组,转换为易读形式

1
2
3
4
time.asctime(time.gmtime()) 

<<
	'Thu Jan  7 10:36:57 2021'

localtime(seconds)

将秒数转化为对应的时间元组

时间格式化

strftime(tpl, ts)

时间元组转字符串

  • tpl:时间格式化模板字符串,用来定义输出效果
形式解释
%Y年份
%m月份
%B月份名称 January
%b月份名称缩写 Jan
%d日期
%A星期 Monday
%a星期缩写 Mon
%H小时 24
%h小时 12
%p上下午
%M分钟
%S
  • ts:是计算机内部时间类型变量。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
t=time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t)
<<
	'2021-01-07 10:40:34'
    
time.strftime("%Y-%B-%d-%A-%H-%p-%S")
<<
	'2021-January-07-Thursday-18-PM-57'

time.strftime("%A-%p")
<<
	'Thursday-PM'

time.strftime("%M:%S")
<<
    '48:37'

如果 strftime 没有第二个参数,则默认获取当前时间

strptime(timestr, tpl)

字符串转时间元组

根据时间字符串以及格式化输出,转换成结构体。

  • timestr:时间字符串

  • tpl:时间格式化模板字符串,用来定义输出效果

1
2
3
4
timestr = '2018-01-26 12:55:33'
time.strptime(timestr, "%Y-%m-%d %H:%M:%S")
<<
	time.struct_time(tm_year=2018, tm_mon=1, tm_mday=26, tm_hour=12, tm_min=55, tm_sec=33, tm_wday=4, tm_yday=26, tm_isdst=-1)

程序计时

perf_counter()

测量时间,返回一个 CPU 级别的精确时间计数值,单位为秒

由于这个计数值起点不确定,连续调用差值才有意义

1
2
3
4
5
6
start = time.perf_counter 	()
end = time.perf_counter()
end - start

<<
	4.5900000259280205e-05

sleep(s)

产生时间,s 为单位为秒的休眠时间,可以是浮点数,如time.sleep(3.5)

1
time.sleep(10)

秒数化为时间元组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
second_a = 1610524866.1898422
struct_a = time.localtime(second_a)

time.asctime(struct_a)
<<
	'Wed Jan 13 16:01:06 2021'
 
time.strftime("%Y-%m-%d %H:%M:%S", struct_a)
<<
	'2021-01-13 16:01:06'

各种时间类型的互相转换

 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
32
33
34
35
36
# datetime时间转为字符串
def datetime2str(_datetime):
    _str = _datetime.strftime("%Y-%m-%d %H:%M:%S")
    return _str


# 字符串时间转为时间戳
def str2stamp(_str):
    unix_timestamp = time.mktime(time.strptime(_str, "%Y-%m-%d %H:%M:%S"))
    return unix_timestamp


# datetime时间转为时间戳
def datetime2stamp(_datetime):
    timestamp = time.mktime(
        time.strptime(_datetime.strftime("%Y-%m-%d %H:%M:%S"), "%Y-%m-%d %H:%M:%S")
    )
    return timestamp


# 时间戳转为datetime时间
def stamp2datetime(timestamp):
    _datetime = datetime.datetime.fromtimestamp(timestamp)
    return _datetime


# 时间戳转换为字符串
def stamp2str(timestamp: int):
    _str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))
    return _str


# 字符串转换为datetime时间
def str2datetime(_str):
    _datetime = datetime.datetime.strptime(_str, "%Y-%m-%d %H:%M:%S")
    return _datetime