python学习笔记02:时间

感觉datetime模块更好用些

1. time模块

时间元组: (年,月,日,时,分,秒,周几,年中第几天,是否夏令时),手工指定时,最后3项可以指定为0;
时间戳:指定时间距1970-01-01 00:00:00总秒数,float型数;

>>> import time  

1.1. 求当前时间戳

>>> time.time() # 1531722744.1899934,float型数  

1.2. 求给定时间的时间戳(输入时间元组)

>>> t = (2018,7,16,14,38,59,0,0,0) # 时间元组,最后3项可以指定为0  
>>> time.mktime(t) # 1531723139.0,给定时间的时间戳,注意参数只有一个而不是9个  

1.3. 按指定格式显示当前时间,返回字符串

>>> time.strftime('%Y-%m-%d %H:%M:%S') # '2018-07-16 14:54:26',返回str  

1.4. 指定时间字符串,按指定格式拆分为数组

>>> str = '2018-07-1615:20:00'  
>>> time.strptime(str, '%Y-%m-%d %H:%M:%S') # 返回time.struct_time  

返回time.struct_time(tm_year=2018, tm_mon=7, tm_mday=16, tm_hour=15, tm_min=20, tm_sec=0, tm_wday=0, tm_yday=197, tm_isdst=-1)
如果时间格式串与字符串不匹配会报告错误:time data xxx does not match format '%xxx'

1.5. 显示英文时间

>>> t = (2018,7,16,14,38,59,0,0,0)  
>>> time.asctime(t) # 'Mon Jul 16 14:38:59 2018',返回str  

1.6. 进程挂起1s, 0.1s时间

>>> time.sleep(1)
>>> time.sleep(0.1)

1.7. 格式化字符串

格式 说明
%y 两位数年份(00-99)
%Y 四位数年份(0000-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 当前时区的名称
%% %号本身

2. datetime模块

时间元组: (年,月,日,时,分,秒,微秒),注意这个时间元组有7个元素;
时间戳:给定的时间距离开始时间(1970-01-01 00:00:00)总秒数,float型数;

datetime模块中有一个datetime类,所有的信息都存储在这个类中

2.1. 初始化datatime类

>>> import datetime
>>> dt = datetime.datetime # 给datetime类一个别名
>>> type(dt)
# <class 'type'>

2.2. 得到一个指定具体时间的datetime类dt0

>>> dt0 = dt(2018,7,16,17,7,30,1)
>>> type(dt0)# 可以从dt0中取想要的数据
# <class 'datetime.datetime'>

2.3. 分别取年、月、日、时、分、秒、微秒

>>> dt0.year# 取年份, 返回值为int
2018
>>> dt0.month # 取月份, 返回值为int
7
>>> dt0.day# 取日期,返回值为int
16
>>> dt0.hour# 取时,返回值为int
14
>>> dt0.minute# 取分,返回值为int
29
>>> dt0.second# 取秒,返回值为int
20
>>> dt0.microsecond# 取微秒,返回值为int
253127

2.4. 取date和time

>>> dt0.date()# 取年月日, 返回datetime.date类
datetime.date(2018,7,16)
>>> dt0.time()# 取时间, 返回datetime.time类
datetime.time(17,7,30,1)

2.5. 取周几、日历

>>> # 取周几:
>>> dt0.weekday()#周一为0, 返回值为int
0
>>> dt0.isoweekday() #周一为1, 返回值为int
1
>>> dt0.isocalendar() # 取日历, 返回tuple,
(2018, 29,1)# 含义:(年,第几周,周几);

2.6. 公元天数换算

>>> dt0.toordinal() # 到公元元年的天数, 返回值为int
736891
>>> dt1 = dt0.fromordinal(54) # 指定到公元元年的天数,算datetime,返回datetime类
>>> dt1
datetime.datetime(1,2,23,0,0)

2.7. 取当前时间、零时区时间

>>> # 取当前时间:返回datetime类
>>> dt2 = dt.today()
>>> dt2
datetime.datetime(2018,7,17,10,31,53,757945)
>>> dt3 = dt.now()
>>> dt3
datetime.datetime(2018,7,17,10,31,53,758002)
>>>
>>> # 取零时区时间:返回datetime类
>>> dt4 = dt.utcnow()
>>> dt4 # 中国是东8区,所以零时区时间=中国时间-8 (东边日出早,小时数值大)
datetime.datetime(2018,7, 17, 2, 31, 53, 758017)

2.8. 取时间的标准str

>>> dt0.isoformat() # 得到时间的标准str,返回值为str
'2018-07-16T17:07:30.1'

2.9. 时间戳

>>> dt0.timestamp() # 从datetime取时间戳: 返回float,小数位表示毫秒数
1531732050.000001
>>> dt5 = dt0.fromtimestamp(1531732650.000001) # 从时间戳取datetime: 返回datetime类
>>> dt5
datetime.datetime(2018,7,16,17,17,30,1)

2.10. 自定义格式时间、英文格式时间

strptime与strftime作用是相反的.

>>> dt.strftime('%Y-%m-%d') # 按自定义格式返回时间str
'2018-07-16'
>>> dt.ctime() # 取英文格式的时间,返回str, 它可以通过strptime再转为datetime类.
'Mon Jul 16 17:07:30 2018'

2.11. 时间元组

>>> dt0.timetuple() # 得到9个元素的时间元组,
time.struct_time(tm_year=2018, tm_mon=7,tm_mday=16, tm_hour=17, tm_min=07, tm_sec=30,tm_wday=1, tm_yday=190,tm_isdst=-1)

2.12. 给定时间str,按时间格式拆开,返回datetime.datetime类

strptime与strftime作用是相反的.

>>> str='2049-12-31 23:59:59'
>>> dt6 = dt.strptime(str, '%Y-%m-%d %X')
>>> dt6
datetime.datetime(2049,12,31,23,59,59)
>>>
>>> # 有些EDA工具中的时间是如下内容: 'Mon Oct 28 16:10:24 2024', 把它转为datetime类.
>>> dt7 = dt.strptime('Mon Oct 28 16:10:24 2024', '%a %b %d %H:%M:%S %Y')
>>> dt7
datetime.datetimme(2024, 10, 28, 16, 10, 21)

2.13. datetime加减

>>> now = datetime.datetime.now()
datetime.datetime(2017,8,23,14,21,33,796979)
>>>
>>> now + datetime.timedelta(hours=10)
datetime.datetime(2017,8,24,0,21,33,796979)
>>>
>>> now - datetime.timedelta(days=1)
datetime.datetime(2017,8,22,14,21,33,796979)
>>>
>>> now + datetime.timedelta(days=2, hours=12)
datetime.datetime(2017,8,26,2,21,33,796979)

3. 把总秒数转为天/时/分/秒

假设一个总秒数268240,
转为时分秒为 : 74:30:40
转为天时分秒为: 2天02:30:40

>>> n = 268240    ; 总秒数
>>> 
>>> n%60          ; 刨去整分钟的秒数, 剩余的秒数
40                
>>> n//60         ; 整分钟数
4470              
>>> n//60%60      ; 刨去整小时的分钟数, 剩余的分钟数
30                
>>> n//60//60     ; 整小时数
74
>>> n//60//60%24  ; 刨去整天的小时数, 剩余的小时数
2
>>> n//60//60//24 ; 整天数
3
>>>
posted @ 2020-07-03 10:26  编程驴子  阅读(179)  评论(0编辑  收藏  举报