date、time和datetime
一、简介
我们在编写代码时,往往涉及到时间和日期的运用。时间日期又是一种特有的格式(<class 'datetime.datetime'>),这种格式不像我们常见数据格式容易操作,在使用的时候有诸多不便。例如我们想改变它的显示样式,或者按照一定的年、月等特性进行分类。但是我们可以对datetime进行格式转换后操作。
进行格式转化后,python中datetime模块变的非常好用。在python中提供了日期格式和字符串格式相互转化的函数strftime()和strptime()
- strftime():由日期格式转化为字符串格式的函数
- strptime():由字符串格式转化为日期格式的函数
二、datetime模块中的数据类型
在python的标准库中包含日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差。给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象。
三、引入时间日期模块
1、引入datetime
from datetime import datetime
from datetime import timedelta
#生成一个现在时间日期类型
now = datetime.now()
delta = now - datetime(2017,6,27,10,10,10,10)
print(now,type(now))
#结果:2019-07-07 09:39:59.805549 <class 'datetime.datetime'>
print(now.date(),type(now.date()))
#结果:2019-07-07 <class 'datetime.date'>
print(now.time(),type(now.time()))
#结果:09:39:59.805549 <class 'datetime.time'>
print(delta,type(delta))
#结果:739 days, 23:29:49.805539 <class 'datetime.timedelta'>
print(delta.days,type(delta.days))
#结果:739 <class 'int'>
#datetime参数:datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
2、引入time
import time # (1)当前时间戳 #time.time() one = time.time() print(one) #结果:1562468537.7579844 # (2)时间戳 → 时间元组,默认为当前时间 # time.localtime() 括号中放时间戳 two = time.localtime(time.time()) print(two) #结果:time.struct_time(tm_year=2019, tm_mon=7, tm_mday=7, tm_hour=11, tm_min=2, tm_sec=17, tm_wday=6, tm_yday=188, tm_isdst=0) print(time.localtime(123456)) #结果:time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=18, tm_min=17, tm_sec=36, tm_wday=4, tm_yday=2, tm_isdst=0 # (3)时间戳 → 可视化时间 # time.ctime(时间戳),默认为当前时间 three = time.ctime(1562467704.0623) print(three) #结果:Sun Jul 7 10:48:24 2019 # (4)时间元组 → 时间戳 # 1562463871.0 four = time.mktime((2019, 7, 7, 9, 44, 31, 6, 273, 0)) print(four) #结果:1562463871.0 # (5)时间元组 → 可视化时间 # time.asctime(时间元组),默认为当前时间 five = time.asctime((2019, 7, 7, 10, 48, 24, 6, 273, 0)) five1 = time.asctime(time.localtime(1562467704.0623)) print(five,five1) #结果:Sun Jul 7 10:48:24 2019 Sun Jul 7 10:48:24 2019 # (6)时间元组 → 可视化时间(定制) # time.strftime(要转换成的格式,时间元组) six = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print(six) #结果:2019-07-07 11:02:17 # (7)可视化时间(定制) → 时间元祖 # time.strptime(时间字符串,时间格式) print("时间元祖:",time.strptime('2019-7-7 11:32:23', '%Y-%m-%d %H:%M:%S')) #结果:时间元祖: time.struct_time(tm_year=2019, tm_mon=7, tm_mday=7, tm_hour=11, tm_min=32, tm_sec=23, tm_wday=6, tm_yday=188, tm_isdst=-1) # (8)将格式字符串转换为时间戳 eight = "Sun Jul 7 10:48:24 2019" print (time.mktime(time.strptime(eight,"%a %b %d %H:%M:%S %Y"))) #结果:1562467704.0
3、时间元组
引入time模块后就不得不提一下时间元组。时间元组就是Python函数用一个元组装起来的9组数字,这9组数字不是凭空而来,而是根据时间年、月、日……组成,每组数据都有它特定的含义。
时间元组特性表
4、日期、时间格式化符号:
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
四、strptime 和 strftime 函数
时间.strftime(时间格式) datetime.strptime(字符串,时间格式) 示范: datetime.strptime(str,'%Y-%m-%d') datetime.now().strftime("%Y-%m-%d %H:%M:%S")
1、strptime
from datetime import datetime S=datetime.strptime('2019/07/07','%Y/%m/%d') print(S,type(S)) S=datetime.strptime('2019年7月7日星期日','%Y年%m月%d日星期日') print(S,type(S)) S=datetime.strptime('2019年7月7日星期日8时42分24秒','%Y年%m月%d日星期日%H时%M分%S秒') print(S,type(S)) S=datetime.strptime('7/7/2019','%m/%d/%Y') print(S,type(S)) S=datetime.strptime('7/7/2019 8:42:50','%m/%d/%Y %H:%M:%S') print(S,type(S)) #结果: 2019-07-07 00:00:00 <class 'datetime.datetime'> 2019-07-07 00:00:00 <class 'datetime.datetime'> 2019-07-07 08:42:24 <class 'datetime.datetime'> 2019-07-07 00:00:00 <class 'datetime.datetime'> 2019-07-07 08:42:50 <class 'datetime.datetime'>
2、strftime
dt=datetime.now() s=dt.strftime('%m/%d/%Y %H:%M:%S %p') print(s,type(s)) s=dt.strftime('%A,%B %d,%Y') print(s,type(s)) txt =('%s年%s月%s日星期%s %s时%s分%s秒'%(dt.strftime('%Y'),dt.strftime('%m'),dt.strftime('%d'),\
dt.strftime('%w'),dt.strftime('%H'),dt.strftime('%M'),dt.strftime('%S'))) print(txt) s=dt.strftime('%B %d,%Y') print(s,type(s)) 结果: 07/07/2019 14:57:17 PM <class 'str'> Sunday,July 07,2019 <class 'str'> 2019年07月07日星期0 14时57分17秒 July 07,2019 <class 'str'>
strftime中,结果“2019年07月07日星期0 14时57分17秒”,这其中的星期0,怎样让他正常显示,有方法的朋友提示一下,在这里谢谢啦。