time、datatime模块
python中时间日期格式化符号
%Y 年份(4位数表示) %y 年份(2位数表示) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数 %I 12小时制小时数 %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称,如:星期三为Web %A 本地完整星期名称,如:星期三为Wednesday %b 本地简化星期名称,如:4月份为Apr %B 本地完整星期名称,如:4月份为April %c 本地相应的日期表示和时间表示,如:04/07/10 10:43:39 %j 年内的一天(001-366) %p AM或PM的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %w 今天在这周的天数(0-6)星期天为星期的开始 %x 本地相应的日期表示,如:09/09/18 %X 本地相应的时间表示,如:11:11:11 %z 与utc时间的间隔(如果是本地时间,返回空字符串) %Z 时区名称(如果是本地时间,返回空字符串) %% %号本身
一、time模块
#常用方法 import time time.sleep(secs) #(线程)推迟指定的时间运行,单位为秒 current_time = time.time() # 获取当前时间戳 print(current_time)
表示时间的三种方式:
- timestamp(时间戳):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量;运行 type(time.time()),返回的是float类型
- Format String(格式化的时间字符串):例如 2018-09-09
import time print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2018-09-09 20:27:11
- struct_time(结构化时间,用元组表示):struct_time元组共有9个元素;年、月、日、时、分、秒、一年中第几周、一年中第几天、是否是夏令时
import time
# 结构化时间(元组) print(time.localtime()) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=9, tm_hour=20, tm_min=38, tm_sec=16, tm_wday=6, tm_yday=252, tm_isdst=0)
总结:
- 时间戳是计算机能够识别的时间
- 时间字符串是人能够看懂的时间
- 结构化时间(元组)则是用来操作时间的
三种时间表示方式的转换:
时间戳 <--> 结构化时间
# 时间戳 --> 结构化时间 # 格式:time.localtime(时间戳) print(time.localtime(8800000000)) # time.struct_time(tm_year=2248, tm_mon=11, tm_mday=11, tm_hour=4, tm_min=26, tm_sec=40, tm_wday=5, tm_yday=316, tm_isdst=0) # 结构化时间 --> 时间戳 # 格式:time.mktime(结构化时间) tuple_time = time.localtime(8800000000) print(time.mktime(tuple_time)) # 8800000000.0
结构化时间 <--> 字符串时间
# 结构化时间 --> 字符串时间 # 格式:time.strftime("字符串对应格式","结构化时间") 结构化时间参数若不传,则显示当前时间 print(time.strftime("%Y-%m-%d", time.localtime(1000000000))) # 2001-09-09 # 字符串时间 --> 结构化时间 # 格式:time.strptime("时间字符串","字符串对应格式") print(time.strptime("2001-09-09", "%Y-%m-%d")) # time.struct_time(tm_year=2001, tm_mon=9, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=252, tm_isdst=-1)
# 结构化时间 --> %a %b %d %H:%M:%S %Y # 格式:time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化字符串 print(time.asctime(time.localtime(1000000000))) # Sun Sep 9 09:46:40 2001 print(time.asctime(time.localtime())) # Sun Sep 9 20:58:28 2018 # 时间戳 --> %a %b %d %H:%M:%S %Y # 格式:time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化字符串 print(time.ctime(1000000000)) #Sun Sep 9 09:46:40 2001 print(time.ctime()) #Sun Sep 9 21:00:11 2018
二、datatime模块
import datetime
datetime模块中包含如下类
datetime.date # 表示日期的类。常用的属性有year, month, day。 datetime.time # 表示时间的类。常用的属性有hour, minute, second, microsecond。 datetime.datetime # 表示日期时间。 datetime.timedelta # 表示时间间隔,即两个时间点之间的长度。 datetime.tzinfo # 与时区有关的相关信息。
data类
d = datetime.date(2019, 2, 19) print(d) # 2019-02-19 print(d.year) print(d.month) print(d.day) d = datetime.date.today() print(d) # 2019-02-19
time类
d = datetime.time(21, 36, 37) print(d) print(d.hour) print(d.minute) print(d.second)
datatime类
d = datetime.datetime(2019, 2, 19, 21, 36, 37) print(d) # 2019-02-19 21:36:37 d = datetime.datetime.today() # datetime.datetime.now() print(d) # 2019-02-19 21:36:37.709934
timedelta类
①获取上个月第一天和最后一天的日期
today = datetime.date.today() print(today) # 2019-02-19 last_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1) print(last_day) # 2019-01-31 first_day = datetime.date(last_day.year, last_day.month, 1) print(first_day) # 2019-01-01
②计算当前时间向后8个小时的时间
可以计算:天(days)、小时(hours)、分钟(minutes)、秒(seconds)、微秒(microseconds)
d = datetime.datetime.now() print(d) # 2019-02-19 21:39:54.970777 d = d + datetime.timedelta(hours=8) print(d) # 2019-02-20 05:39:54.970777
③计算上周一和周日的日期
today = datetime.datetime.today() today_weekday = today.isoweekday() # 返回weekday,星期一返回0,星期二返回1,以此类推 last_sunday = today - datetime.timedelta(days=today_weekday) last_monday = last_sunday - datetime.timedelta(days=6) print(last_sunday.date()) # 2019-02-17 print(last_monday.date()) # 2019-02-11