python之datetime模块
Python的时间管理模块中除了time模块外还有非常好用的datetime模块,但不得不说的是有一点非常令人困扰,因为在datetime模块中有一个time对象,而time模块本身还有一个函数叫time()。其实Datetime比time高级了不少,可以直接理解为datetime是基于time进行了封装,提供了更多实用的函数。
datetime模块定义了下面这几个类:
- date:表示日期的类。常用的属性有year, month, day。
- time:表示时间的类。常用的属性有hour, minute, second, microsecond。
- datetime:表示日期时间,处理日期和时间同时出现的情况。
- timedelta:表示时间间隔,即两个时间点之间的长度。
- tzinfo:与时区有关的相关信息。
下面,我们分别就datetime模块下面的几个类举例说明。
datetime.date
import datetime
print('today方法:',datetime.date.today())# 返回当前日期
print('fromtimestamp方法:',datetime.date.fromtimestamp(86400))# 返回时间戳的日期
# 输出如下:
# today方法: 2018-09-27
# fromtimestamp方法: 1970-01-02
a = datetime.date(2020,5,7)
print('a.year:',a.year)# 返回date对象的年份
print('a.month:',a.month)# 返回date对象的月份
print('a.day:',a.day)# 返回date对象的日
print('a.timetuple():',a.timetuple())# 返回date对象的时间元组
print('a.weekday():',a.weekday())#返回周几(0-6)
print('a.isoweekday():',a.isoweekday())#返回周几(1-7)
print('a.isocalendar():',a.isocalendar())#返回一个元组(年份,这一年的第几周,周几)
print('a.isoformat():',a.isoformat())#返回iso 8601格式(YYYY-MM-DD)
print('a.ctime():',a.ctime())# 返回一个表示日期的字符串
print('a.strftime():',a.strftime('%Y年%m月%d日'))# 返回指定格式的日期字符串
print('a.replace():',a.replace(year = 2088,month = 11,day = 22))#替换指定年月日
# 输出如下:
# a.year: 2020
# a.month: 5
# a.day: 7
# a.timetuple(): time.struct_time(tm_year=2020, tm_mon=5, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=128, tm_isdst=-1)
# a.weekday(): 3
# a.isoweekday(): 4
# a.isocalendar(): (2020, 19, 4)
# a.isoformat(): 2020-05-07
# a.ctime(): Thu May 7 00:00:00 2020
# a.strftime(): 2020年05月07日
# a.replace(): 2088-11-22
datetime.time
import datetime
b = datetime.time(22,33,44,1111)#4个参数分别为:时,分,秒,微秒(1微妙=10的负6次方秒)
print('b.hour:',b.hour)#返回time对象的小时数
print('b.minute:',b.minute)# time对象的分钟数
print('b.second:',b.second)# time对象秒数
print('b.microsecond:',b.microsecond) # time对象微秒数
print('b.isoformat()',b.isoformat())#返回 ISO 8601格式:HH:MM:SS.mmmmmm
print('b.strftime():',b.strftime('%H点%M分%S秒%f微妙'))# 返回指定的时间格式
print('b.replace():',b.replace(hour=23))#替换指定的时间
# 输出如下:
# b.hour: 22
# b.minute: 33
# b.second: 44
# b.microsecond: 1111
# b.isoformat() 22:33:44.001111
# b.strftime(): 22点33分44秒001111微妙
# b.replace(): 23:33:44.001111
datetime.datetime
import datetime
# 返回本地当前的时间
print('datetime.datetime.today():',datetime.datetime.today())
#now()接收一个参数tz,也就是timezone时区,如果这个参数不存在时,它的表现等同于today()
print('datetime.datetime.now():',datetime.datetime.now())
#utcnow()返回UTC时间
print('datetime.datetime.utcnow():',datetime.datetime.utcnow())
#fromtimestamp()反回指定时间戳对应的时间
print('datetime.datetime.fromtimestamp():',datetime.datetime.fromtimestamp(111111111))
#combine()用于拼接date对象和time对象
print('datetime.datetime.combine():',datetime.datetime.combine(datetime.date(2012,12,1),datetime.time(12,23,22)))
#根据指定的格式输出日期时间
print('datetime.datetime.strptime():',datetime.datetime.strptime('2099.9.1','%Y.%m.%d'))
# 输出如下:
# datetime.datetime.today(): 2018-09-27 21:42:01.471634
# datetime.datetime.now(): 2018-09-27 21:42:01.471731
# datetime.datetime.utcnow(): 2018-09-27 13:42:01.471796
# datetime.datetime.fromtimestamp(): 1973-07-10 08:11:51
# datetime.datetime.combine(): 2012-12-01 12:23:22
# datetime.datetime.strptime(): 2099-09-01 00:00:00
d = datetime.datetime(2018,1,14,8,18,18)
print('d.date():',d.date())# 从datetime对象中拆分出date
print('d.time():',d.time())# 从datetime对象中拆分出time
print('d.timetz():',d.timetz())#从datetime对象中拆分出时区属性的time
print('d.replace(year = 2030,day = 19):',d.replace(year = 2030,day = 19))#替换
print('d.timetuple():',d.timetuple())#返回时间元组
print('d.weekday():',d.weekday())#周几(0-6)
print('d.isoweekday():',d.isoweekday())#周几(1-7)
print('d.isocalendar():',d.isocalendar())#返回一个元组(年份,这一年的第几周,周几)
print('d.ctime():',d.ctime())#返回日期的字符串格式
print('d.strftime():',d.strftime('%Y-%m-%d %H:%M')) #以指定格式返回日期字符串
# 输出如下:
# d.date(): 2018-01-14
# d.time(): 08:18:18
# d.timetz(): 08:18:18
# d.replace(year = 2030,day = 19): 2030-01-19 08:18:18
# d.timetuple(): time.struct_time(tm_year=2018, tm_mon=1, tm_mday=14, tm_hour=8, tm_min=18, tm_sec=18, tm_wday=6, tm_yday=14, tm_isdst=-1)
# d.weekday(): 6
# d.isoweekday(): 7
# d.isocalendar(): (2018, 2, 7)
# d.ctime(): Sun Jan 14 08:18:18 2018
# d.strftime(): 2018-01-14 08:18
datetime.timedelta
timedelta对象表示一个时间段,即两个日期 (date) 或日期时间 (datetime) 之间的差。用法如下:
import datetime
a = datetime.date.today()
b = datetime.datetime.now()
print('现在日期是:',a)
print('计算10天前的日期:',a - datetime.timedelta(days=10))
print('现在时间是:',b)
print('计算5天5小时之前的日期',b - datetime.timedelta(days=5,hours=5))
# 输出如下:
# 现在日期是: 2018-09-27
# 计算10天前的日期: 2018-09-17
# 现在时间是: 2018-09-27 21:10:13.414434
# 计算5天5小时之前的日期 2018-09-22 16:10:13.414434