日期、时间
python可以通过多种方式处理日期和时间。 时间(time)、 日期时间(datetime) 和 日历(calendar) 模块可用于跟踪日期和时间。
代码语言:javascript复制>>> import time #导入时间模块,可以定时睡眠
>>> import datetime #导入时间日期模块
>>> startTime = datetime.datetime.now() #当前时间
>>> time.sleep(3) #睡眠3秒
>>> endTime = datetime.datetime.now() #当前时间
>>> print( (endTime - startTime).seconds ) #获取时间差(秒)
>>> d1 = datetime.datetime.now() #当前时间
>>> d2 = d1 datetime.timedelta(days = 10) #10天后的时间
>>> d2
datetime.datetime(2018, 4, 19, 16, 2, 4, 825259)
>>> d1
datetime.datetime(2018, 4, 9, 16, 2, 4, 825259)
提供与日期和时间相关的4个模块:
- time : time是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C 编写的几个类。 例如,struct_time类。
- datetime : datetime是一个使用面向对象编程设计的模块,可以在Python中使用日期和时间。它定义了几个表示日期和时间的类。
- calendar : 日历是一个提供函数的模块,以及与Calendar相关的几个类,它们支持将日历映像生成为text,html
- locale : 该模块包含用于格式化或基于区域设置分析日期和时间的函数。
时间间隔
时间间隔是以秒为单位的浮点数。从1970年1月1日上午12:00开始。
time 模块中的time() 函数返回1970年1月1日上午12:00开始的秒数。
但是,这个形式不能表示在时代(1970年1月1日上午12:00)之前的日期。在未来的日子也不能以这种方式表示 - 截止点是在2038年的UNIX和Windows的某个时刻。
代码语言:javascript复制>>> import time
>>> time.time()
1523279564.329913
TimeTuple 时间元组
许多python函数将时间处理成 9 个数字的元组,如下所示:
索引字段值 04位数表示年份2018,2019… 1月份1~12 2日期1~31 3小时0~23 4分钟0~59 5秒0~61(60或61是闰秒) 6星期几0~6(0是星期一) 7一年的第几天1~366(朱利安日) 8夏令时-1, 0, 1; -1表示库确定DST
代码语言:javascript复制>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=9, tm_hour=21, tm_min=34, tm_sec=12, tm_wday=0, tm_yday=99, tm_isdst=0)
获取当前时间
要将从时间浮点值开始的秒数瞬间转换为时间序列,将浮点值传递给返回具有所有有效九个项目的时间元组的函数(例如本地时间)。
日期格式化函数: time.strftime() 函数。 格式字符串:时间的都是大写表示。 - %Y : 表示年,四位 - %m : 表示月,两位 - %d : 表示天,两位 - %H : 大写,表示小时 - %M : 大写,表示分钟 - %S : 大写,表示秒
代码语言:javascript复制>>> time.strftime("%Y-%m-%d %H:%M:%S" ,time.localtime())
'2018-04-09 21:48:29'
获取一个月的日历
calendar 模块提供了广泛的方法来显示年历和月度日历。
代码语言:javascript复制>>> import calendar
>>> calendar.month(2018, 4) #获取的是可打印字符串
' April 2018nMo Tu We Th Fr Sa Sun 1n 2 3 4 5 6 7 8n 9 10 11 12 13 14 15n16 17 18 19 20 21 22n23 24 25 26 27 28 29n30n'
>>> print(calendar.month(2018, 4)) #打印
April 2018
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
时间模块
time 时间模块提供了处理时间
- clock() : 将当前CPU时间返回为浮点数秒。 为了测量不同方法的计算成本,time.clock的值比time.time()的值更有用。
- ctime() :类似于asctime(localtime(secs)),而没有参数就像asctime()
- time.localtime([secs]): 接受从时代(epoch)以秒为单位的瞬间,并返回与本地时间相关的时间t(t.tm_isdst为0或1,具体取决于DST是否适用于本地规则的瞬时秒)。
- time.mktime(tupletime) : 接受在本地时间表示为时间元组的瞬间,并返回浮点值,该时间点以秒为单位表示。参数是struct_time或完整的9个元组,它返回一个浮点数,以便与time()兼容。如果输入值不能表示为有效时间,则会引发OverflowError或ValueError异常。
- time.sleep(secs) : 暂停调用线程 secs 秒。
- time.strftime(fmt[,tupletime]) : 接受在本地时间表示为时间元组的瞬间,并返回一个表示由字符串fmt指定的时间的字符串。
- time.strptime(str,fmt = ‘%a %b %d %H:%M:%S %Y’)) : 按给定格式fmt解析字符串str,返回时间元组格式的时间.
- time.time( ) : 返回当前时间时刻,即从时代(epoch)开始的浮点数秒数。
import time
print ("time.localtime() : %s" , time.localtime())
time.localtime() : time.struct_time(tm_year = 2019, tm_mon = 2, tm_mday = 15,
tm_hour = 10, tm_min = 13, tm_sec = 50, tm_wday = 0, tm_yday = 46, tm_isdst = 0)
import time
t = (2019, 2, 15, 10, 13, 38, 1, 48, 0)
d = time.mktime(t) #指定元组作为时间
print ("time.mktime(t) : %f" % d)
print ("asctime(localtime(secs)): %s" % time.asctime(time.localtime(d)))
结果:
time.mktime(t) : 1550196818.000000
asctime(localtime(secs)): Fri Feb 15 10:13:38 2019
>>> time.strftime('%Y%m%d') #日期格式化
'20180409'
>>> time.strptime('20180808', '%Y%m%d') #解析日期字符串
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=220, tm_isdst=-1)
日历模块
calendar 模块提供与日历相关的功能。包括为给定的月份或年份打印文本日历的功能。 默认情况下,日历将星期一作为一周的第一天,将周日作为最后一天,可以通过调用 calendar.setfirstweekday()函数设置修改。
代码语言:javascript复制>>> print(calendar.month(2018, 4))
April 2018
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.setfirstweekday(6) #变更日历的第一天为周日
>>> print(calendar.month(2018, 4))
April 2018
Su Mo Tu We Th Fr Sa
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.calendar(year,w = 2,l = 1,c = 6) : 返回一个具有年份日历的多行字符串格式化为三列,以c个空格分隔。 w是每个日期的字符宽度; 每行的长度为21 * w 18 2 * c,l是每周的行数。
代码语言:javascript复制>>> calendar.setfirstweekday(0)
>>> print(calendar.calendar(2019, 2, 1, 6,3))
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(): 返回当前设置每周开始的星期。默认情况下,当日历首次输入时为0,表示星期一,可以通过setfirstweekday()修改默认设置.
>>> calendar.firstweekday()
0
- calendar.isleap(year) : 给定年份为闰年则返回True
>>> calendar.isleap(2019)
False
>>> calendar.isleap(2004)
True
- calendar.month(year,month,w = 2,l = 1) : 返回一个多行字符串,其中包含年份月份的日历,每周一行和两个标题行。 w是每个日期的字符宽度; 每行的长度为7 * w 6。 l是每周的行数。
>>> print(calendar.month(2019,4,w = 4,l = 3))
April 2019
Mon Tue Wed Thu Fri Sat Sun
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