time模块
UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时
time模块主要有三种格式:
- timestamp 时间戳,表示从1970年1月1日00:00:00 开始按秒计算的偏移量
- struct_time 时间元组,共有九个元组。
- format time 格式化时间,已格式的结构使得时间具有更好的可读性,包括自定义格式和固定格式
常用方法:
- time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准
time.localtime()
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=12, tm_min=26, tm_sec=36, tm_wday=1, tm_yday=234, tm_isdst=0)
2.time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time
time.gmtime()
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=12, tm_min=27, tm_sec=12, tm_wday=1, tm_yday=234, tm_isdst=0)
3.time.time():返回当前时间的时间戳
time.time()
1503404864.0598114
4.time.mktime(t):将一个struct_time转化为时间戳
time.mktime(time.localtime())
1503404894.0
5.time.sleep(secs):线程推迟指定的时间运行。单位为秒
6.time.clock():这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
if __name__ == '__main__': time.sleep(1) print('clock1: ', time.clock()) time.sleep(1) print('clock1: ', time.clock()) time.sleep(1) print('clock1: ', time.clock())
7.time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。
time.asctime()
'Tue Aug 22 12:28:47 2017'
8.time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
time.ctime()
'Tue Aug 22 12:29:29 2017'
time.ctime(time.time())
'Tue Aug 22 12:29:42 2017'
9.time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。
time.strftime('%Y-%m-%d %X')
'2017-08-22 11:57:37'
time.strftime('%Y-%m-%d %H:%M:%S')
'2017-08-22 11:58:36'
format time
格式 | 含义 |
%a | 本地(locale)简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化月份名称 |
%B | 本地完整月份名称 |
%c | 本地相应的日期和时间表示 |
%d | 一个月中的第几天(01 - 31) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%I | 第几个小时(12小时制,01 - 12) |
%j | 一年中的第几天(001 - 366) |
%m | 月份(01 - 12) |
%M | 分钟数(00 - 59) |
%p | 本地am或者pm的相应符 |
%S | 秒(01 - 61) |
%U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 |
%w | 一个星期中的第几天(0 - 6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。 |
%x | 本地相应日期 |
%X | 本地相应时间 |
%y | 去掉世纪的年份(00 - 99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
datetime模块
以datetime 为中心,转换目标。
- datetime
>>> from datetime import datetime >>> now = datetime.now() >>> now datetime.datetime(2017, 8, 22, 20, 49, 18, 520999) >>> type(now) <class 'datetime.datetime'>
- timestamp
>>> import time >>> time.time() 1503406350.929317
- time tuple
>>> time.localtime() time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=20, tm_min=52, tm_sec=54, tm_wday=1, tm_yday=234, tm_isdst=0)
- string
>>> datetime.now().strftime('%Y-%m-%d %X') '2017-08-22 20:54:14'
- date
>>> datetime.now().date() datetime.date(2017, 8, 22)
datetime 基本操作
1.获取当天date
>>> datetime.now().date() datetime.date(2017, 8, 22)
from datetime import date >>> today = date.today() >>> today
2.获取明天/ 前N天
>>> from datetime import timedelta >>> datetime.now() + timedelta(days=1) datetime.datetime(2017, 8, 23, 21, 0, 7, 295142)
3.获取当天开始和结束时间(00:00:00 23:59:59)
>>> datetime.datetime.combine(datetime.date.today(), datetime.time.min) datetime.datetime(2017, 8, 22, 0, 0) >>> datetime.datetime.combine(datetime.date.today(), datetime.time.max) datetime.datetime(2017, 8, 22, 23, 59, 59, 999999)
4.获取两个datetime时间差
>>> (datetime(2015,1,13,12,0,0) - datetime.now()).total_seconds()\ -82285613.367164
5. 获取本周/本月/ 上月最后一天
>>> datetime.now().date() datetime.date(2017, 8, 22) >>> today = datetime.now().date() >>> today datetime.date(2017, 8, 22) >>> sunday = today + timedelta(6-today.weekday()) >>> sunday datetime.date(2017, 8, 27)
获取本月最后一天
>>> import calendar >>> today = date.today() >>> _, day_num = calendar.monthrange(today.year, today.month) >>> day_num 31 >>> last_day = date(today.year, today.month, day_num) >>> last_day datetime.date(2017, 8, 31)
获取上个月最后一天
from datetime import date >>> today = date.today() >>> today datetime.date(2017, 8, 22) >>> first = date(day=1, month=today.month, year=today.year) >>> lastMonth = first-timedelta(days=1) >>> lastMonth datetime.date(2017, 7, 31)
关系转换
Datetime Object / String / timestamp / time tuple
datetime <=> string
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S') '2017-08-22 21:36:39'
>>> datetime.strptime("2017-08-22 21:39:36", '%Y-%m-%d %H:%M:%S') datetime.datetime(2017, 8, 22, 21, 39, 36)
datetime <=> timetuple
>>> datetime.now().timetuple() time.struct_time(tm_year=2017, tm_mon=8, tm_mday=22, tm_hour=21, tm_min=40, tm_sec=40, tm_wday=1, tm_yday=234, tm_isdst=-1)
timetuple->timestamp->datetime
>>> import time >>> time.mktime(time.localtime()) 1503410219.0 >>> datetime.datetime.fromtimestamp(time.mktime(time.localtime())) datetime.datetime(2017, 8, 22, 21, 58, 18)
datetime <=> date
>>> datetime.now().date()
datetime.date(2017, 8, 22)
>>> import datetime >>> datetime.time() datetime.time(0, 0) >>> today = datetime.date.today() >>> datetime.datetime.combine(today, datetime.time()) datetime.datetime(2017, 8, 22, 0, 0)
datetime <=> timestamp
>>> now = datetime.now() >>> timestamp = time.mktime(now.timetuple()) >>> timestamp 1503409670.0
>>> datetime.fromtimestamp(time.time()) datetime.datetime(2017, 8, 22, 21, 49, 38, 72906)