有哪些常用的时间模块
- time内置模块
- datatime内置模块
- 第三方模块
# 导入python自带的时间模块
import time
# time的方法,常用的是time , sleep , localtime, strftime , strptime
dir(time)
['_STRUCT_TM_ITEMS',
'__doc__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'altzone',
'asctime',
'clock',
'ctime',
'daylight',
'get_clock_info',
'gmtime',
'localtime',
'mktime',
'monotonic',
'monotonic_ns',
'perf_counter',
'perf_counter_ns',
'process_time',
'process_time_ns',
'sleep',
'strftime',
'strptime',
'struct_time',
'thread_time',
'thread_time_ns',
'time',
'time_ns',
'timezone',
'tzname']
### time模块的一些方法和操作
time.time() # 当前时间
# 时间的减法,计算经过了的时间
start = time.time()
print(start)
end = time.time() # 结束的时间
print(f'时间过了{end - start}秒') # 结束时间减开始时间,得出差的秒数
# 可以用来计算一个循环(或者一段程序)经过的时间
start = time.time()
for i in range(1000):
x = 22 / 7 + i
end = time.time()
print(f'时间过了{end - start}秒') # 结束时间减开始时间,得出差的秒数
# sleep,暂停数秒,用来控制程序时间
for i in range(5):
print(i)
time.sleep(1) # 这样每个循环会停顿1秒
时间格式转换
# 结构化时间与时间戳的转换
time.localtime()
# 返回当前结构化时间(元组)
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=1, tm_hour=11, tm_min=10, tm_sec=38, tm_wday=0, tm_yday=91, tm_isdst=0)
pythontime.localtime(1554085738)
# 转换给定时间戳
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=1, tm_hour=10, tm_min=28, tm_sec=58, tm_wday=0, tm_yday=91, tm_isdst=0)
Index 属性 Values<br /> 0 tm_year (for example, 1993)<br /> 1 tm_mon range [1, 12]<br /> 2 tm_mday range [1, 31]<br /> 3 tm_hour range [0, 23]<br /> 4 tm_min range [0, 59]<br /> 5 tm_sec range [0, 61]; see (2) in strftime() description<br /> 6 tm_wday range [0, 6], Monday is 0 星期几<br /> 7 tm_yday range [1, 366] 每年的第多少天<br /> 8 tm_isdst 0, 1 or -1; see below 夏令时<br /> N/A tm_zone abbreviation of timezone name<br /> N/A tm_gmtoff offset east of UTC in seconds
# 结构化时间转回时间戳, mktime(tuple) -> floating point number
time.mktime(time.localtime())
%Y Year with century as a decimal number.<br /> %m Month as a decimal number [01,12].<br /> %d Day of the month as a decimal number [01,31].<br /> %H Hour (24-hour clock) as a decimal number [00,23].<br /> %M Minute as a decimal number [00,59].<br /> %S Second as a decimal number [00,61].<br /> %z Time zone offset from UTC.<br /> %a Locale's abbreviated weekday name.<br /> %A Locale's full weekday name.<br /> %b Locale's abbreviated month name.<br /> %B Locale's full month name.<br /> %c Locale's appropriate date and time representation.<br /> %I Hour (12-hour clock) as a decimal number [01,12].<br /> %p Locale's equivalent of either AM or PM.<br /> <br /> %X = %H:%M:%S 这个比较常用的
# 指定字符串格式输出
time.strftime('%Y-%m-%d %X', time.localtime())
# 字符串转化为元组,strptime(string, format) -> struct_time 时间, 时间格式
time.strptime('2019-04-01 11:54:50', '%Y-%m-%d %X')
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=1, tm_hour=11, tm_min=54, tm_sec=50, tm_wday=0, tm_yday=91, tm_isdst=-1)
datetime模块
datetime 模块提供了用于以简单和复杂的方式操作日期和时间的类。
在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。
import datetime
from datetime import datetime # 导入的是datetime模块下的datetime类
datetime
datetime.now() # 返回的是datetime对象,但是对象里的时间不易读
datetime.datetime(2019, 4, 1, 14, 20, 2, 883527)
字符串输出,在指定格式时,有两种写法,推荐使用第二种
# 使用字符串格式化将对象格式化输出,字符串有一个format方法,可以用别名(如:dt)在对应位置引入,{dt:%X},:后面的意思是用此格式输出
# 此方法为传统的写法
print('{dt:%X}'.format(dt=datetime.now()))
print('{dt:%Y-%m-%d %X}'.format(dt=datetime.now()))
print('{dt:%Y/%m/%d-%X}'.format(dt=datetime.now()))
# 新的写法,对象后面接 : 直接定义输入格式
f'{datetime.now():%Y/%m/%d-%X}'
datetime模块
from datetime import date # 导入date类
# date(year, month, day) --> date object,date可以生成一个date对象
d = date(2049,4,1)
print(d)
# 生成当前日期的对象
print(date.today())
from datetime import time # datetime下的time
# 生成时间对象
t = time(11, 11)
print(t)
# timedelta类,计算时间间隔的类
from datetime import timedelta
d = timedelta(days=2) # 生成一个时间间隔的对象
print(type(d))
print(d)
d = timedelta(days=1,hours=10)
print(d)
# 计算时间间隔具体应用
today = date.today()
print(f'今天是{today}')
print(f'经过了{d}之后,是{today + d}') # 时间对象和时间间隔对象可以相加
print(f'之前的{d},是{today - d}') # 也可以做减法
# today这个对象里有相应的属性
today = date.today()
print(type(today))
print(today.day) # 日
print(today.month) # 月
格式化字符串(重点)
from datetime import datetime
dt = datetime(2049,1,2,8,8)
print(dt)
print(dt.strftime('%Y#%m#%d %X %X')) # dt对象里有strftime方法,可以输出指定的格式
print(dt.strftime('%A %B %Y'))
print('\n')
print(dt.strptime('Saturday January 2049', '%A %B %Y')) # # strptime, 转回
dt.strptime('2049#01#02 08:08:00', '%Y#%m#%d %X')
dateutil第三方库(更方便)
from datetime import datetime
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *
# 下周的星期三是几点
d = datetime.now()
print(d)
print('本周三是',d + relativedelta(weekday=WE)) # 这个计算出下一个周三是几号,返回的是本周三日期
print('下周三是',d + relativedelta(weekday=WE, weeks= +1)) # 加一个weeks参数,指定数几周
print('上周三是',d + relativedelta(weekday=WE, weeks= -1))
# 下个月是哪天?需要处理2月不到30天,大小月问题
from datetime import date
date(2019,1,31) + relativedelta(months=+1) # 计算的是下一个月的最后一天
datetime.date(2019, 2, 28)
# 可以计算年
date(2019,4,2) + relativedelta(years=-2)
datetime.date(2017, 4, 2)