一、time模块
常用函数
1. time()函数
time()函数返回的是时间戳(timestamp)。所谓时间戳指的是从1970年1月1日00:00:00开始按秒计算的偏移量。其他返回时间戳方式的函数还有clock()。
实例
import time time.time()
1515117751.8810253
2. ctime()函数
ctime()函数可以将一个时间戳转化为字符串的形式,默认time.time()为参数。(convert time in seconds to string)
实例
import time time.ctime() 'Fri Jan 5 10:21:29 2018' time.ctime(1500000000) 'Fri Jul 14 10:40:00 2017'
4.gmtime()函数
gmtime()用于获取UTC时间,UTC时间实际就是格林尼治时间,它与中国时间的时差为八个小时。
实例
import time time.gmtime() time.struct_time(tm_year=2018, tm_mon=1, tm_mday=5, tm_hour=3, tm_min=27, tm_sec=18, tm_wday=4, tm_yday=5, tm_isdst=0)
5. localtime()函数
localtime()用于获取当前时区的当前时间。
实例
import time time.localtime() time.struct_time(tm_year=2018, tm_mon=1, tm_mday=5,tm_hour=11, tm_min=28, tm_sec=48, tm_wday=4, tm_yday=5, tm_isdst=0)
6. strftime()函数
strftime()把一个代表时间的元组或者struct_time(如time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
实例
time.strftime("%Y-%m-%d %X") '2018-01-05 11:20:21' time.strftime("%Y-%m-%d %H:%M:%S") '2018-01-05 11:21:30' time.strftime("%Y-%m-%d %X", time.localtime()) '2018-01-05 11:23:04'
* format time格式化表示*
格式 含义
%Y 完整的年份
%m 月份(01 - 12)
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%M 分钟数(00 - 59)
%S 秒(01 - 61)
%X 本地相应时间
%x 本地相应日期
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%p 本地am或者pm的相应符
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始
%y 去掉世纪的年份(00 - 99)
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符
注:表中加粗部分为最常用格式
7. strptime()函数
strptime()把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
实例
import time time.strptime('2018-01-05 10:50:06','%Y-%m-%d %X') time.struct_time(tm_year=2018,tm_mon=1,tm_mday=5,tm_hour=10,tm_min=50,tm_sec=6, tm_wday=4, tm_yday=5, tm_isdst=-1)
8. mktime()函数
mktime()可以将struct_time转换成用时间的浮点数表示
实例
time.mktime(time.gmtime()) 1515094387.0 time.mktime(time.localtime()) 1515123246.0
9. sleep()函数
线程推迟指定的时间运行,单位为秒。
import time
time.sleep(3) #表示延迟3秒后程序继续运行
小结:
time模块中时间表现的格式主要有3种:
1. timestamp 时间戳
2. tuple或者struct_time 时间元组,共有九个元素组
3. formattime格式化字符串
它们之间的转化如图所示:
二、datetime模块
datetime模块包含一个datetime类,通过from datetime import datetime导入的就是datetime这个类。
常见操作
1. 获取当前日期
from datetime import datetime now = datetime.now() now datetime.datetime(2018, 1, 5, 16, 2, 47, 929705) print(now) 2018-01-05 16:02:47.929705
2. 获取指定日期和时间
from datetime import datetime dt=datetime(2018, 1, 1, 1, 1) print(dt) 2018-01-01 01:01:00
3. datetime类型转换为timestamp
只需要简单调用timestamp()方法
from datetime import datetime dt=datetime(2018, 1, 1, 1, 1) dt.timestamp() 1514739660.0
4. timestamp转换为datetime
使用datetime提供的fromtimestamp()方法
from datetime import datetime t = 1514739660.0 print(datetime.fromtimestamp(t)) 2018-01-01 01:01:00
5. str转换为datetime
当日期和时间为字符串时,需要把str转换为datetime,可通过datetime.strptime()实现。
from datetime import datetime dt= datetime.strptime('2018-1-1 1:11:11', '%Y-%m-%d %H:%M:%S') print(dt) 2018-01-01 01:11:11
6. datetime转换为str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的。
from datetime import datetime now = datetime.now() now datetime.datetime(2018, 1, 5, 16, 22, 50, 394736) now.strftime('%Y-%m-%d %H:%M:%S') '2018-01-05 16:22:50'
7. datetime加减
对日期和时间进行加减需要导入timedelta这个类
from datetime import datetime, timedelta now = datetime.now() now datetime.datetime(2018, 1, 5, 16, 22, 50, 394736) now + timedelta(hours=10) datetime.datetime(2018, 1, 6, 2, 22, 50, 394736) now - timedelta(days=10) datetime.datetime(2017, 12, 26, 16, 22, 50, 394736) now + timedelta(days=10, hours=12) datetime.datetime(2018, 1, 16, 4, 22, 50, 394736)
小结
datetime模块定义了5个类:
序号 类 含义
1 datetime.datetime 表示日期时间的类
2 datetime.timedelta 表示时间间隔,即两个时间点的间隔
3 datetime.date 表示日期的类
4 datetime.time 表示时间的类
5 datetime.tzinfo 时区的相关信息
# 转成时间戳 a= "2018-02-03 15:01:32" timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S") timeStamp = int(time.mktime(timeArray))
# 转时间格式 import datetime time = "20180312" img_time = datetime.datetime.strptime(time, "%Y%m%d").strftime("%Y-%m-%d")
#导入日期时间模块 import datetime #获得今天的日期 today = datetime.date.today() #用今天日期减掉时间差,参数为1天,获得昨天的日期 yesterday = today - datetime.timedelta(days=1) #用今天日期加上时间差,参数为1天,获得明天的日期 tomorrow = today + datetime.timedelta(days=1) # 一个月的第一天 fist = datetime.date(datetime.date.today().year, datetime.date.today().month - 1, 1) # 一个月的最后一天 last = datetime.date(datetime.date.today().year, datetime.date.today().month, 1) - datetime.timedelta(1)
时间戳转日期
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(1517974137))) time.strftime('%Y-%m-%d %H:%M:%S', time.time.localtime())
日期循环
import datetime begin = datetime.date(2019, 8, 1) end = datetime.date(2019, 10, 14) for i in range((end - begin).days + 1): day = str(begin + datetime.timedelta(days=i)) print(day)