标准库time
time模块中时间表现的格式主要有三种:
时间戳timestamp
是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。
返回时间戳的函数主要有time()、clock()等。
时间元组struct_time
日期、时间是包含许多变量的,所以在Python中定义了一个元组struct_time将所有这些变量组合在一起,包括:4位数年、月、日、小时、分钟、秒等。
struct_time元组共有9个元组,
返回struct_time的函数主要有gmtime(),localtime(),strptime()。
所有变量及要求如下:
序号 | 字段 | 对应的struct_time元组的属性 | 值 |
---|---|---|---|
0 | 4位数年 | tm_year | 2008 |
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是决定是否为夏令时的旗帜 |
格式化时间format time
- strftime()函数将获取的计算机能识别的时间格式转换成便于人类识别的格式
- strptime()函数将便于人类识别的时间格式转换成计算机能识别的时间格式
time
1、time.time()
返回当前时间的时间戳(1970纪元后经过的浮点秒数)
>>> import time;
>>> time.time();
1554693461.8102486
2、time.sleep(secs),函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
>>> import time;
>>> time.sleep(5);
3、time.gmtime()
将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1以来的秒数。其默认值为time.time(),函数返回time.struct_time类型的对象。
>>> import time;
>>> time.gmtime();
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=8, tm_hour=4, tm_min=41, tm_sec=5, tm_wday=0, tm_yday=98, tm_isdst=0)
4、time.localtime()
获取当前时间,
从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。
>>> import time;
>>> time.localtime();
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=8, tm_hour=11, tm_min=37, tm_sec=33, tm_wday=0, tm_yday=98, tm_isdst=0)
5、time.mktime()
执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。
如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。
>>> time.mktime(time.localtime())
1554698704.0
6、time.strftime(format[, t])
格式化日期
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2019-04-08 12:27:55'
7、time.strptime()
根据指定的格式把一个时间字符串解析为时间元组。
time.strptime(string[, format])
string – 时间字符串。
format – 格式化字符串。
>>> time.strptime("8 Apr 19","%d %b %y");
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=98, tm_isdst=-1)
8、time.asctime()
获取格式化时间
>>> import time;
>>> time.asctime();
'Mon Apr 8 12:18:50 2019'
9、time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。
如果参数未给或者为None的时候,将会默认time.time()为参数。
它的作用相当于 asctime(localtime())
>>> import time;
>>> time.ctime();
'Mon Apr 8 20:16:29 2019'
时间日期格式化符号
指令 | 描述 |
---|---|
%a | 简化星期名称,如Sat |
%A | 完整星期名称,如Saturday |
%b | 简化月份名称,如Nov |
%B | 完整月份名称,如November |
%c | 当前时区日期和时间 |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%j | 年内的一天(001-366) |
%m | 月份(01-12) |
%M | 分钟数(00-59) |
%p | AM或PM,AM表示上午,PM表示下午 |
%S | 秒(00-59) |
%U | 一年中第几个星期(00-53)星期天为星期的开始 |
%w | 星期几(0-6),星期天为星期的开始 |
%W | 一年中第几个星期(00-53)星期一为星期的开始 |
%x | 本地日期,如’11/12/16’ |
%X | 本地时间,如’17:46:20’ |
%y | 简写年名称,00-99。如16 |
%Y | 完整年名称,000-9999。如2016 |
%Z | 当前时区名称(PST:太平洋标准时间) |
%% | 代表一个%号本身 |
标准库datetime
datatime比time要高级一些,用一些处理日期,时间和时间间隔的函数。
datetime可以理解为date和time两个组成部分。
date是指年月日构成的日期(相当于日历),time是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)。
可以将这两个分开管理(datetime.date类,datetime.time类),也可以将两者合在一起(datetime.datetime类)。
包含如下的类型:
- datetime.datetime代表了日期和一天的时间。
- datetime.date代表日期,在1到9999之间。
- datetime.time 代表时间和独立日期。
- datetime.timedelta 代表两个时间或者日期的间隔。
- datetime.tzinfo 实现时区支持
1,datetime.datetime
datetime类有很多参数,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),返回年月日,时分秒
- datetime.datetime.ctime():将datetime.datetime类型转化成str类型
>>> datetime.datetime.ctime(datetime.datetime.now())
'Mon Apr 8 20:52:49 2019'
- datetime.datetime.now().date():返回当前日期时间的日期部分
>>> datetime.datetime.now().date()
datetime.date(2019, 4, 8)
- datetime.datetime.now().time():返回当前日期时间的时分秒
>>> datetime.datetime.now().time()
datetime.time(20, 51, 38, 981016)
- datetime.datetime.fromtimestamp()
- datetime.datetime.now():返回当前系统时间
>>> datetime.datetime.now()
datetime.datetime(2019, 4, 8, 20, 49, 26, 238143)
- datetime.datetime.replace()
- datetime.datetime.strftime():由日期格式转化为字符串格式
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2019-04-08 20:55:46'
- datetime.datetime.strptime():由字符串格式转化为日期格式
>>> datetime.datetime.strptime('2019-04-08 20:55:46','%Y-%m-%d %H:%M:%S')
datetime.datetime(2019, 4, 8, 20, 55, 46)
2,datetime.date
date类有三个参数,datetime.date(year,month,day),返回year-month-day
1.datetime.date.ctime()
返回格式如 Sun Apr 16 00:00:00 2017
>>> datetime.date(2019,4,13).ctime()
'Sat Apr 13 00:00:00 2019'
2.datetime.date.fromtimestamp(timestamp)
根据给定的时间戮,返回一个date对象;datetime.date.today()作用相同
>>> datetime.date.fromtimestamp(123456789)
datetime.date(1973, 11, 30)
3.datetime.date.isocalendar()
返回格式如(year,month,day)的元组,
>>> datetime.date(2019,4,13).isocalendar()
(2019, 15, 6)
4.datetime.date.isoformat():
返回格式如YYYY-MM-DD
>>> datetime.date(2019,4,13).isoformat()
'2019-04-13'
5.datetime.date.isoweekday()
返回给定日期的星期(0-6)星期一=0,星期日=6 这里表明下python3中是从[1-7]表示的 就是本来是星期几现在显示就是星期几
>>> datetime.date(2019,4,13).isoweekday()
6
6.datetime.date.replace(year,month,day):
替换给定日期,但不改变原日期
>>> datetime.date(2019,4,13).replace(2019,4,12)
datetime.date(2019, 4, 12)
7.datetime.date.strftime(format):
把日期时间按照给定的format进行格式化。
datetime.date(2019,4,13).strftime("%Y-%m-%d %H:%M:%S")
'2019-04-13 00:00:00'
8.datetime.date.timetuple():
返回日期对应的time.struct_time对象
>>> datetime.date(2019,4,13).timetuple()
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=13, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=103, tm_isdst=-1)
9.datetime.date.weekday():
返回日期的星期
datetime.date(2019,4,13).weekday()
5
3.datetime.time类
time类有5个参数,datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:30
1.datetime.time.replace()
>>> datetime.time(17,30,00).replace()
datetime.time(17, 30)
2.datetime.time.strftime(format):
按照format格式返回时间
>>> datetime.time(17,30,00).strftime("%Y-%m-%d %H:%M:%S")
'1900-01-01 17:30:00'
3.datetime.time.tzname():
返回时区名字
4.datetime.time.utcoffset():
返回时区的时间偏移量
4,datetime.timedelta类
获取当前时间
>>> datetime.datetime.now()
datetime.datetime(2019, 4, 13, 10, 40, 34, 650486)
获取五天后的时间
>>> datetime.datetime.now() + datetime.timedelta(5)
datetime.datetime(2019, 4, 18, 10, 41, 43, 197395)
获取五天后的时间
>>> datetime.datetime.now() - datetime.timedelta(5)
datetime.datetime(2019, 4, 8, 10, 43, 37, 299398)
获取三个小时后的时间
>>> datetime.datetime.now() + datetime.timedelta(hours=3)
datetime.datetime(2019, 4, 13, 13, 44, 2, 907477)
>>>
获取三个小时前的时间
>>> datetime.datetime.now() - datetime.timedelta(hours=3)
datetime.datetime(2019, 4, 13, 7, 44, 48, 587841)
calendar库
calendar库的函数都是与日历相关的。
星期一是默认的第一天,星期天是默认的最后一天,如果要更改设置需要调用calendar.setfirstweekday()函数。
calendar库包含以下内置函数
- calendar.prmonth(year,month)
打印给定月份的日历
>>> import calendar
>>> calendar.prmonth(2019, 4)
April 2019
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
- calendar.prcal(year)
打印给定年份的日历
>>> calendar.prcal(2019)
2019
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 1 2 3 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
- calendar.firstweekday( )
返回当前每周起始日期的设置。
默认情况下,首次载入caendar模块时返回0,即星期一。
>>> calendar.firstweekday( )
0
- calendar.isleap(year)
是闰年返回True,否则为false。
>>> calendar.isleap(2019)
False
>>> calendar.isleap(2018)
False
>>> calendar.isleap(2000)
True
- calendar.month(year,month,w=2,l=1)
返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
>>> calendar.month(2019,4,w=2,l=1)
' April 2019\nMo Tu We Th Fr Sa Su\n 1 2 3 4 5 6 7\n 8 9 10 11 12 13 14\n15 16 17 18 19 20 21\n22 23 24 25 26 27 28\n29 30\n'
- calendar.calendar(year,w=2,l=1,c=6)
返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
>>> calendar.calendar(2019,w=2,l=1,c=6)
' 2019\n\n January February March\nMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n 1 2 3 4 5 6 1 2 3 1 2 3\n 7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10\n14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17\n21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24\n28 29 30 31 25 26 27 28 25 26 27 28 29 30 31\n\n April May June\nMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n 1 2 3 4 5 6 7 1 2 3 4 5 1 2\n 8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9\n15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16\n22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23\n29 30 27 28 29 30 31 24 25 26 27 28 29 30\n\n July August September\nMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n 1 2 3 4 5 6 7 1 2 3 4 1\n 8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8\n15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15\n22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22\n29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29\n 30\n\n October November December\nMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n 1 2 3 4 5 6 1 2 3 1\n 7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8\n14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15\n21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22\n28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29\n 30 31\n'
- calendar.leapdays(y1,y2)
返回在Y1,Y2两年之间的闰年总数。
>>> calendar.leapdays(1900,2019)
29
- calendar.monthcalendar(year,month)
返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
>>> calendar.monthcalendar(2019,4)
[[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, 0, 0, 0, 0, 0]]
- calendar.monthrange(year,month)
返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
>>> calendar.monthrange(2019,4)
(0, 30)
- calendar.setfirstweekday(weekday)
设置每周的起始日期码。0(星期一)到6(星期日)。
将星期日设置为一周第一天
>>> calendar.setfirstweekday(firstweekday=6)
>>> print(calendar.firstweekday())
6
-
calendar.timegm(tupletime)
和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。 -
calendar.weekday(year,month,day)
返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。
>>> calendar.weekday(2019,4,13)
5
- calendar.weekheader(n)
返回包含星期的英文缩写,n表示英文缩写所占的宽度
>>> calendar.weekheader(4)
'Sun Mon Tue Wed Thu Fri Sat '
- calendar.monthcalendar(year, month)
返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。
包括月份开始那周的所有日期和月份结束那周的所有日期
>>> calendar.monthcalendar(2019,4)
[[0, 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, 0, 0, 0, 0]]
>>>
random库
random() 返回随机生成的一个实数,它在[0,1)范围内
random库包含两类函数,常用的共8个
- 基本随机函数: seed(), random()
- 扩展随机函数:randint(), getrandbits(), uniform(), randrange(), choice(),
shuffle()。
基本随机函数
-
seed()
初始化给定的随机数种子,默认为当前系统时间 -
random()
生成一个随机的浮点数,范围是在 0.0~1.0 之间。
>>> import random
>>> random.random()
0.33018729126932533
扩展随机函数
- randint()
从参数指定的范围里随机选择一个整数返回来
>>> import random
>>> random.randint(10,100)
46
- getrandbits()
getrandbits(k)生成一个k比特长的随机整数
>>> import random
>>> random.getrandbits(54)
1308655171282813
- uniform()
设定浮点数的范围,一个是上限,一个是下限。
>>> import random
>>> random.uniform(10, 20)
15.951933825013633
- randrange()
生成一个[m,n)之间以k为步长的随机整数
random.randrange(start, stop[, step])
>>> import random
>>> random.randrange(10,100,10)
90
- choice()
从序列中获取一个随机元素。
>>> import random
>>> random.choice("吴世勋")
'吴'
- shuffle()
shuffle(seq) 将序列seq中元素随机排列,返回打乱后的序列
>>> import random
>>> s=[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> random.shuffle(s)
>>> print(s)
[8, 3, 5, 4, 1, 2, 6, 9, 7]