date类介绍
作用:date类用来处理日期信息
date类是datetime的内嵌类,实例化语法:
datetime.date(year,month,day)
参数介绍:
year年份、month月份及day日期
import datetime
t=datetime.date(2019,8,26)
print(type(t))
print(t.day,t.month,t.year)
#
#26 8 2019
day类常见操作
获取当天日期
语法:datetime.date.today
import datetime
a = datetime.date.today()
print(a)
print(a.day,a.month,a.day)
#2019-08-26
#26 8 26
date日期比较大小
import datetime
a1 = datetime.date(2019,8,26)
a2 = datetime.date(2019,9,26)
print(a1<a2)
print(a2-a1)
#True
#31 days, 0:00:00
date类两个日期作差(求相差天数)
ISO标准化日历
语法:datetime.date.isocalendar()
返回一个包含三个值的元组(year,weeknumber,weebday):
year年份,weeknumber周序号,weekday星期序号(周一为1…周日为7)
得到ISO 8601标准的日期字符串
语法:isoformat()
返回符合YYYY-MM-DD格式的日期字符串
得到ISO8601标准指定日期的星期序号
语法:isweekday()
返回指定日期的星期序号
import datetime
a1 = datetime.date(2019,8,26)
print(a1.isocalendar())
print(a1.isoformat())
print(a1.isoweekday())
print(a1.weekday())
print(a1.replace(2018,4,30))
#(2019, 35, 1)
#2019-08-26
#1
#0
#2018-04-30
weekday方法
语法:date对象.weekday()
返回weekday,如果是星期一,返回0,如果星期2,返回1
replace替换方法
语法:date对象.replace(year,month,day)
返回一个替换指定日期字段的新date对象。注意替换是产生新对象,不影响原date对象
timetuple方法
语法:date对象.timetuple
返回值:为兼容time.localtime(…)返回一个类型为time.struct_time的数组,但时间部分元素值为0。返回值中tm_isdst表示是否时夏令时,1表示夏令时,-1表示不是夏令时。
toordinal方法
语法:date对象.toordinal()
返回值:返回公元公历开始到现在的天数,公园1年1月1日为1
import datetime
t=datetime.date(2019,8,26)
print(t.timetuple())
print(t.toordinal())
#time.struct_time(tm_year=2019, tm_mon=8, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=238, tm_isdst=-1)
#737297
date类重要属性
max属性
语法:datetime.date.max
返回date类所能表示的最大年、月、日数值
min属性
语法:datetime.date.min
返回date类所能表示的最小年、月、日数值
import datetime
print(datetime.date.max)
print(datetime.date.min)
#9999-12-31
#0001-01-01
(4)日期时间所有可能的格式化输出
date类日期的格式化输出
语法:date对象.strftime(格式化字符串)
日期格式化字符帮助输出格式化的日期字符串
import datetime
t=datetime.date(2019,8,26)
a_str = t.strftime("%d/%m/%Y")
a_str1 = t.strftime("%Y")+a1.strftime("/%m")+a1.strftime("/%d")
a_str2 = t.strftime("%Y-%m-%d %H:%M:%S")
print(a_str)
print(a_str1)
print(a_str2)
print(t.strftime("%a"))
print(t.strftime("%D%%"))
print(t.strftime("%d-%m-%Y %H:%M:%S %f"))
print(t.ctime())
#26/08/2019
#2019/08/26
#2019-08-26 00:00:00
#Mon
#08/26/19%
#26-08-2019 00:00:00 000000
#Mon Aug 26 00:00:00 2019
ctime()方法输出日期格式
语法:date对象.ctime()
返回:ctime样式的日期格式
tzinfo时区类介绍
时区是当前时间与UTC时间的小时差,北京时区是东八区,所以时间比UTC格里尼时间早八个小时
由于tzinfo时区类无法实例化,因此要用到时区类需要继承tzinfo,创建子类。
(1)time类介绍
作用:time类用来处理时间信息
time类是datetime的内嵌类
hour小时、minute分钟、second秒、microsecond微妙和tzinfo时区
import datetime
class UTC(datetime.tzinfo):#继承tzinfo
def __init__(self,offset=0):
self._offset = offset
def utcoffset(self,dt):
return datetime.timedelta(hours=self._offset)
def tzname(self,dt):
return "UTC+%d区" %self._offset
def dst(self,dt):
return datetime.timedelta(hours=self._offset)
offset=int((datetime.datetime.now()-datetime.datetime.utcnow()).total_seconds()/3600)
print(offset)
#8
beijing=datetime.datetime(2011,11,11,0,0,0,tzinfo=UTC(offset))
print(beijing)
#2011-11-11 00:00:00+08:00
bangkok=datetime.datetime(2011,11,11,0,0,0,tzinfo=UTC(7))
timespan=beijing-bangkok
print(type(timespan))
#
print(timespan)
#-1 day, 23:00:00
print(beijing.astimezone(UTC(7)))
#2011-11-10 23:00:00+07:00
bj=datetime.time(9,58,1,200,tzinfo=UTC(2))
print(bj)
#09:58:01.000200+02:00
t1=datetime.time(19,10,11)
t2=datetime.time(20,10,11)
print(t1<t2)
#True
t3=datetime.datetime.now().time()
print(t3)
#22:16:05.466821
print(t3.hour,t3.minute,t3.second,t3.microsecond)
#22 16 5 466821
print(t3.strftime("%M:%S:%H"))
#16:05:22
print(datetime.time.isoformat(t3))
#22:16:05.466821
(2)time类常用方法
datetime类获得当前时间方法
语法:datetime.datetime.now().time()
返回值:返回一个datetime.time类对象
time类时间的字符串格式化输出
语法:time对象.strftime(格式化字符串)或者datetime.time.strftime(time对象,格式化字符串)
返回值:格式化后的字符串
ISO标准时间格式输出
语法:datetime.isoformat(time对象)或者time对象.isoformat()
返回值:ISO标准格式时间字符串
time类常用属性
最大时间:datetime.time.max
最小时间:datetime.time.min
时间分辨率:datetime.time.resolution
import datetime
print(datetime.time.max)
print(datetime.time.min)
print(datetime.time.resolution)
#23:59:59.999999
#00:00:00
#0:00:00.000001
作用:date类可以同时获得日期和时间信息
date类是datetime的内嵌类,实例化语法:
datetime.datetime(year,month,day,hour,mintue,second,microsecond)
import datetime
t=datetime.datetime(2019,8,26,10,12,0,0)
print(t.strftime("%Y-%m-%d %H:%M:%S %f"))
#2019-08-26 10:12:00 000000
datetime类方法
now()
语法:datetime.datetime.now()
返回值:返回当前本地日期时间
utctimetuple()
语法:datetime对象.utctimetuple()
返回值:UTC时间元组
日期时间组合函数combine()
语法:datetime.datetime.combine(date对象,time对象)
返回值:返回一个date对象和一个time对象合成的date对象
当前UTC时间datetime.datetime.utcnow():返回当前日期的UTC datetime对象
得到时间的时间戳datetime.timestamp():从1970年1月1日0时0分0秒开始的时间秒数.微妙
从字符串解析出日期时间对象strptime()
语法:datetime.datetime.strptime(日期时间字符串)
返回值:根据日期时间字符串string和格式化字符串format2个参数,返回一个对应的datetime
从时间戳返回UTC日期时间utcfromtimestamp()
语法:UTC时间戳的datetime对象
返回值:从时间戳返回UTC的datetime对象
import datetime
time_now=datetime.datetime.now()
print(time_now)
#2019-08-26 23:11:33.716549
print(time_now.utctimetuple())
#time.struct_time(tm_year=2019, tm_mon=8, tm_mday=26, tm_hour=23, tm_min=11, tm_sec=33, tm_wday=0, tm_yday=238, tm_isdst=0)
print(datetime.datetime.combine(time_now.date(),time_now.time()))
#2019-08-26 23:11:33.716549
print(datetime.datetime.utcnow())
#2019-08-26 15:11:33.717545
print(time_now.timestamp())
#1566832293.716549
str_time="2010-11/10 23:10:9"
t=datetime.datetime.strptime(str_time,"%Y-%m/%d %H:%M:%S")
print(t)
#2010-11-10 23:10:09
sta=time_now.timestamp()
print(datetime.datetime.utcfromtimestamp(sta))
#2019-08-26 15:19:17.029112
datetime类常见属性
最大日期时间表示datetime.datetime.max 返回9999-12-31 23:59:59.999999
最小日期时间表示datetime.datetime.max 返回0001-01-01 00:00:00
datetime.timedelta类
timedelta表示时间的差值对象
语法:datetime.timedelta(weeks=0,days=0,hours=0,minutes=0,seconds=0,milliseconds=0,microsecons=0)
每个参数可正,可负也可0,默认是0
获取时间差
两个date日期作差
两个datetime日期时间作差
返回:时间差timedelta对象
与日期时间作和
timedelta对象+timedelta对象=>timedelta对象
datetime对象+timedelta对象=>datetime对象
import datetime
td1=datetime.timedelta(days=100)
td2=datetime.timedelta(days=-10)
td3=datetime.timedelta(hours=-10)
td4=datetime.timedelta(days=-1,hours=-1,minutes=-10)
print(td2)
#-10 days, 0:00:00
t1=datetime.datetime(2019,8,29,0,0,0)
print(t1+td3)
#2019-08-28 14:00:00
t2=datetime.datetime.now();
print(t2+td4)
#2019-08-25 22:20:22.716749
#周数
td5=datetime.timedelta(weeks=10)
print(t1+td3)
#2019-08-28 14:00:00