Python~datetime模块详解
datetime 模块定义了下面几个类:
datetime.date:日期类。常用的属性有year,month,day;
datetime.time:时间类。常用的属性有hour,minute,second,microsecond;
datetime.timedelta:表示时间间隔,即两个时间点之间的长度;
datetime.tzinfo:与时区有关的信息;
date类
获取最大、最小日期
>>> import datetime
>>> datetime.date.min
datetime.date(1, 1, 1)
>>> datetime.date.max
datetime.date(9999, 12, 31)
>>> print (datetime.date.max)
9999-12-31
>>> print (datetime.date.min)
0001-01-01
date.today()函数:获取今天的日期
>>> datetime.date.today()
datetime.date(2018, 11, 3)
>>> print (datetime.date.today())
2018-11-03
date.fromtimestamp()函数:根据给定的时间戳timestamp,返回一个date对象
>>> import datetime
>>> import time
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2018, 11, 3)
date.weekday()函数:返回weekday中的星期几,星期一,返回0;星期二,返回1;以此类推。该函数需要一个datetime.date类型的参数
>>> from datetime import date
>>> date.weekday(date.today())
5
>>> date.today()
datetime.date(2018, 11, 3)
date.isoweekday函数:返回weekday中的星期几,星期一,返回1;星期二,返回2;以此类推
>>> date.today()
datetime.date(2018, 11, 3)
>>> date.isoweekday(date.today())
6
date.isocalendar函数:返回datetime.date时间对象中的year(年),week(周),weekday(工作日)
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 11, 3, 20, 13, 3, 868295)
>>> now=datetime.datetime.now()
>>> print (now)
2018-11-03 20:13:21.756677
>>> s=datetime.date.isocalendar(now)
>>> print (s)
(2018, 44, 6)
date.strftime(fmt)函数:返回自定义的格式时间字符串。参数fmt是自定义的时间格式
>>> import datetime
>>> now=datetime.datetime.now()
>>> print (now)
2018-11-03 20:13:21.756677
>>> styleTime=now.strftime("%Y-%m-%d %H:%M:%S")
>>> print (styleTime)
2018-11-03 20:13:21
日期加上一个时间间隔
dateNew = dateOld + timedelta 日期加上一个间隔,返回一个新的日期对象。timedelta表示时间间隔
from datetime import * #获取当前日期 dateOld=date.today() print (dateOld) #计算十天后的日期 dateNew=dateOld+timedelta(days=10) print (dateNew) |
日期减去一个时间间隔
dateNew = dateOld - timedelta 日期减去一个时间间隔,返回一个新的日期对象
from datetime import * #获取当前日期 dateOld=date.today() print (dateOld) #计算十天后的日期 dateNew=dateOld-timedelta(days=10) print (dateNew) |
两个日期相减
timedelta = date1 - date2 返回两个日期间的间隔对象
from datetime import * #获取当前日期 today=date.today() print (today) #替换日期 future=today.replace(day=10) print (future)
#求两个日期间的间隔 delta=future-today print (delta)
#在新日期上加上一个日期间隔 print (future+delta) |
比较日期大小
date1 < date2 返回比较结果布尔值,真返回True,假返回False
from datetime import * #获取当前日期 today=date.today() print (today) #替换日期 future=today.replace(day=10) print (future)
#比较日期大小 print (today>future) print (today<=future) |
time类
获取最大、最小时间
>>> from datetime import *
>>> time.min
datetime.time(0, 0)
>>> print (time.min)
00:00:00
>>> time.max
datetime.time(23, 59, 59, 999999)
>>> print (time.max)
23:59:59.999999
hour/minute/second/microsecond:时、分、秒、微妙
>>> datetime.now()
datetime.datetime(2018, 11, 3, 20, 41, 46, 203844)
>>> tm=datetime.now()
>>> tm.hour
20
>>> tm.minute
41
>>> tm.second
53
>>> tm.microsecond
670825
time.replace函数:用给定的参数时、分、秒、微秒代替原有对象中的属性,创建一个新的时间对象,但原有对象仍保持不变
from datetime import * #获取当前日期 date1=datetime.now() print (date1) #替换时间 date2=date1.replace(hour=10,minute=33) print (date2) |
time.isoformat函数:返回时间格式如:HH:MM:SS的时间字符串表示
>>> from datetime import *
>>> tm1=time(22,45,16)
>>> tm1
datetime.time(22, 45, 16)
>>> print (tm1)
22:45:16
>>> tm2=tm1.isoformat()
>>> print (tm2)
22:45:16
time.strftime函数:返回自定义格式时间字符串
>>> from datetime import *
>>> tm1=time(22,45,16)
>>> print (tm1.strftime("%H:%M:%S"))
22:45:16
>>> print (tm1.strftime("%H-%M-%S"))
22-45-16
Datetime类
today和now函数:返回一个表示当前本地时间的datetime对象
>>> tm=datetime.now()
>>> tm
datetime.datetime(2018, 11, 3, 20, 50, 56, 144768)
>>> tm.year
2018
>>> tm.month
11
>>> datetime.today()
datetime.datetime(2018, 11, 3, 20, 51, 31, 226342)
datetime.fromtimestamp(timestamp [, tz])
根据时间戳创建一个datetime对象,参数tz指定时区信息,不传默认为本地时区
>>> from datetime import *
>>> import time
>>> tm=time.time()
>>> tm
1541249663.9445474
>>> tm1=datetime.fromtimestamp(tm)
>>> tm1
datetime.datetime(2018, 11, 3, 20, 54, 23, 944547)
>>> type(tm1)
<class 'datetime.datetime'>
datetime.strftime(format)函数:返回自定义的格式时间字符串
>>> from datetime import *
>>> date1=datetime.now()
>>> date1.strftime("%Y-%m-%d %H:%M:%S")
'2018-11-03 21:22:06'
>>> type(date1.strftime("%Y-%m-%d %H:%M:%S"))
<class 'str'>
datetime.strptime函数:将格式时间字符串转换为datetime对象
>>> print (datetime.strptime("2018-11-03 20:45:10","%Y-%m-%d %H:%M:%S"))
2018-11-03 20:45:10
>>> type(datetime.strptime("2018-11-03 20:45:10","%Y-%m-%d %H:%M:%S"))
<class 'datetime.datetime'>
year/month/day /hour/minute/second 属性
>>> from datetime import *
>>> tm=datetime.now()
>>> tm
datetime.datetime(2018, 11, 3, 20, 59, 15, 416657)
>>> print (tm)
2018-11-03 20:59:15.416657
>>> tm.year
2018
>>> tm.hour
20
datetime.date() 函数:获取时间中的日期对象date
>>> from datetime import *
>>> datetime.today()
datetime.datetime(2018, 11, 3, 21, 0, 42, 179892)
>>> datetime.date(datetime.today())
datetime.date(2018, 11, 3)
>>> tm=datetime.date(datetime.today())
>>> tm.year
2018
>>> datetime.date(datetime.now())
datetime.date(2018, 11, 3)
datetime.time()函数:获取时间中的时间对象time
>>> from datetime import *
>>> datetime.time(datetime.now())
datetime.time(21, 3, 21, 801060)
>>> tm=datetime.time(datetime.now())
>>> print (tm)
21:03:29.163089
datetime.combine函数:根据date和time,创建一个datetime对象。
参数
date:是datetime.date类型
time:是datetime.time类型
>>> from datetime import *
>>> print (datetime.combine(datetime.now(),time(15,12,30)))
2018-11-03 15:12:30
datetime.replace()函数
>>> from datetime import *
>>> tm1=datetime.now()
>>> print (tm1)
2018-11-03 21:08:26.054208
>>> tm2=tm1.replace(year=2015,month=10)
>>> print (tm2)
2015-10-03 21:08:26.054208
mktime函数:将datetime对象转换成时间戳
import datetime import time
#获取当前日期 tm1=datetime.datetime.now() print (tm1) #根据当前时间的datetime对象获取当前时间的时间元组 st=tm1.timetuple() print (st) #根据当前时间的时间元组获得当前时间的时间元组 timestamp=time.mktime(st) print (timestamp) |
datetime.weekday(time)函数:参数time是一个datetime.date类型的数据。返回weekday中的星期几,星期一,返回0;星期二,返回1;以此类推
>>> from datetime import *
>>> date.today()
datetime.date(2018, 11, 3)
>>> datetime.weekday(date.today())
5
>>> datetime.date(datetime.now())
datetime.date(2018, 11, 3)
>>> datetime.weekday(datetime.date(datetime.now()))
5
datetime.isocalendar(time)函数:参数time是一个datetime.date类型数据,以元组的形式返回当前日期是今年的第几周第几天
>>> from datetime import *
>>> datetime.isocalendar(date.today())
(2018, 44, 6)
Timedelta类
两日期的时间相减,求两个日期间的天数差
import datetime
#求两个日期间的天数差 d1=datetime.datetime(2018,11,11) d2=datetime.datetime(2019,1,1)
print ((d2-d1).days) |
日期或时间加上或减去一个时间间隔
import datetime
#获取当前的时间 now=datetime.datetime.now() print (now)
#设定一个时间间隔 delta=datetime.timedelta(days=5) newTime=now+delta print (newTime)
#原时间减去2天 delta1=datetime.timedelta(days=-2) newTime1=now-delta1 print (newTime1) |
#计算100天前的日期
from datetime import datetime,timedelta
now=datetime.now() #设置100天前的时间间隔 delta=timedelta(days=-100) #得到100天前的时间 oldTm=now+delta print (oldTm) print (type(oldTm)) print (oldTm.strftime("%Y-%m-%d")) |
timedelta.total_seconds()函数:该方法用于获取总共的秒数
import datetime #计算给定时间间隔的总秒数
seconds=datetime.timedelta(hours=1,seconds=30).total_seconds() print (seconds) |