一、time模块
三种格式
时间戳时间:浮点数 单位为秒
时间戳起始时间:
1970.1.1 0:0:0 英国伦敦时间
1970.1.1 8:0:0 我国(东8区)
结构化时间:元组(struct_time)
格式化时间:str数据类型的
1、常用方法
import timetime.sleep(secs) 推迟指定的时间运行,单位是秒for i in range(3):time.sleep(1)print(i)
2、表示时间的三种方式
时间戳(timestamp)、元组(struct_time)、格式化(str_time)的时间字符串1. 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。 我们运行“type(time.time())”,返回的是float类型。 print(time.time()) # 1536050072.5732844(1970年1月1日00:00:00到此刻运行time.time()的时间) 2. 结构化时间(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一周中第几天,一年中第几天,夏令时) struct_time = time.localtime() # 我国的时间 print(struct_time) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=16, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0) struct_time = time.gmtime() # 伦敦的时间 print(struct_time) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=8, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0)3. 格式化时间(Format_string): fmt1 =time.strftime('%H:%M:%S') # 时分秒(全大写) fmt2 =time.strftime('%Y-%m-%d') # 年月日(年可大写可小写,月日小写) fmt3 =time.strftime('%y-%m-%d') # 年月日 fmt4 =time.strftime('%c') # 本地相应的日期表示和时间表示print(fmt1) # 16:49:03 print(fmt2) # 2018-09-04 print(fmt3) # 18-09-04 print(fmt4) # Tue Sep 4 16:49:03 2018
3、几种时间格式间的转换
1. 转换
Timestamp ---> struct_time: time.localtime(转成我国的时间)、time.gmtime(转成伦敦时间)
struct_time ---> Timestamp: time.mktime()
Format_string ---> struct_time: time.strptime()
struct_time ---> Format_string: time.strftime()
2. 例子
1. 把格式化时间2018年8月8日转成时间戳时间 str_time = '2018-8-8' struct_time = time.strptime(str_time,'%Y-%m-%d') print(struct_time) # 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) timestamp = time.mktime(struct_time) print(timestamp) # 1533657600.02. 把时间戳时间转成格式化时间 timestamp = 1500000000 struct_time = time.localtime(timestamp) str_time = time.strftime('%Y-%m-%d',struct_time) print(str_time) # 2017-07-143. 写函数,计算本月1号的时间戳时间 通过我拿到的这个时间,能迅速的知道我现在所在时间的年 月 def get_timestamp():str_time = time.strftime('%Y-%m-1')struct_time = time.strptime(str_time,'%Y-%m-%d')timestamp = time.mktime(struct_time)return timestamp ret = get_timestamp() print(ret)
%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 当前时区的名称%% %号本身
二、datetime模块
1、dateime.date
import datetime1. datetime.date类型(年月日) 注意:datetime.date类型就是time模块的结构化时间,只是它在内部把结构化时间的显示格式化了再打印出来 datetime.date.today() datetime.date(2018, 12, 21)2.根据给定的时间戮,返回一个date对象 datetime.date.fromtimestamp(timestamp) # 返回一个date对象,与datetime.date.today()作用相同 datetime.date.fromtimestamp(1528345678) # 2018-06-073.由date日期格式转化为字符串格式 datetime.date.strftime(format)datetime.date.today().strftime('%Y-%m-%d') # "2018-12-21" 注意:date类型没有strptime
2、datetime.dateime
注意:datetime是继承了date的类 1. datetime.datetime类型(年月日时分秒微妙时区) datetime.datetime.today() datetime.datetime.now()datetime.datetime(2018,12, 21, 8, 12, 8, 603000)返回当前日期时间的日期部分 datetime.datetime.today().date() # 2018-12-21 返回当前日期时间的时间部分 datetime.datetime.now().time() # 15:19:16.2304492.根据给定的时间戮,返回一个datetime对象 datetime.datetime.fromtimestamp() # 返回一个datetime对象,与datetime.datetime.today()作用相同 datetime.datetime.fromtimestamp(1528345678) # 2018-06-07 12:27:583. 由日期格式转化为字符串格式 datetime.datetime.strftime(format) datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # "2018-12-21 09:17:14"3.由字符串格式转化为日期格式 datetime.datetime.strptime() datetime.datetime.strptime('2018-12-21 11:01:27', '%Y-%m-%d %H:%M:%S')4. 结构化时间:元组 注意:这就是结构化时间初始的样子 datetime.datetime.now().timetuple() # time.struct_time(tm_year=2018, tm_mon=12, tm_mday=21, tm_hour=9, tm_min=18, tm_sec=1, tm_wday=4, tm_yday=355, tm_isdst=-1)
3、datetime.timedelta
datetime.timedelta用于计算两个日期之间的差值datetime.timedelta(weeks=1) # 返回一个时间差,参数weeks,days,hours,minutes,[1 weeks=7 days],没有years,months 例1: import datetime day7 = datetime.timedelta(days=7) # 7天的时间时间隔 一年用52周表示 weeks=52 today = datetime.datetime.now() # 7天之后的时间是什么 # today + 7 after_7 = today + day7 print(after_7, type(after_7))例2: a=datetime.datetime.now() # datetime.datetime(2018, 12, 21, 13, 15, 20, 871000) b=datetime.datetime.now() # datetime.datetime(2018, 12, 21, 13, 15, 29, 603000)print(b-a) # datetime.timedelta(0, 0, 8, 732000) print((b-a).seconds) # 8 print((b-a).total_seconds()) # 8.732 或者 time1 = datetime.datetime(2018, 12, 20) time2 = datetime.datetime(2017, 11, 12)"""计算天数差值""" print((time1-time2).days)"""计算两个日期之间相隔的秒数""" print ((time1-time2).total_seconds())
4、datetime.time
time类有5个参数,datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:301.datetime.time.replace()2.datetime.time.strftime(format):按照format格式返回时间3.datetime.time.tzname():返回时区名字4.datetime.time.utcoffset():返回时区的时间偏移量
三、时间工具dateutil
直接看例子感受时间工具的绝对时间relativedelta吧
from dateutil import relativedelta import datetimenow = datetime.datetime.today() print(now) # 2018-12-21 15:47:31.005604# 下个月 next_month = now + relativedelta.relativedelta(months=1) print(next_month) # 2019-01-21 15:47:31.005604# 注意months和month的区别: # months=1 表示在现在的日期基础上加一个月的时间 # months=-1表示在现在的日期基础上减一个月 # month=1 表示把现在的日期的月份设置为1月 # years, months, days, weeks, hours, minutes, seconds等也是跟对应的year,month,day,week...一样 set_month = now + relativedelta.relativedelta(month=1) print(set_month) # 2018-01-21 15:47:31.005604# 注意与datetime.timedelta区别: # datetime.timedelta没有months和years参数 # 因此一个月用weeks=4表示,只能表示28天后,有偏差 next_month2 = now + datetime.timedelta(weeks=4) print(next_month2) # 2019-01-18 15:47:31.005604# 下个月加一周 next_month_week = now + relativedelta.relativedelta(months=1, weeks=1) print(next_month_week) # 2019-01-28 15:47:31.005604# 下个月加一周,上午10点 next_month_week_ten = now + relativedelta.relativedelta(months=1, weeks=1, hour=10) print(next_month_week_ten) # 2019-01-28 10:47:31.005604# 一年后的前一个月 next_year_premonth = now + relativedelta.relativedelta(years=1, months=-1) print(next_year_premonth) # 2019-11-21 15:47:31.005604