1、datetime

datetime

datetime是Python处理日期和时间的标准库

datetime模块为日期和时间处理同时提供了简单和复杂的方法。

支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出

datetime模块定义了以下几个类:

类名称 描述
datetime.date 表示日期,常用的属性有:year, month和day
datetime.time 表示时间,常用属性有:hour, minute, second, microsecond
datetime.datetime 表示日期时间
datetime.timedelta 表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒,主要用于做时间加减
datetime.tzinfo 时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整
datetime.timezone Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

datetime类

静态属性和方法

"属性"
datetime.min:datetime类所能表示的最小时间。
datetime.max:datetime类所能表示的最大时间。
datetime.resolution:datetime类表示时间的最小单位,这里是1微秒;

"方法"
datetime.today():返回一个表示当前本地时间的datetime对象;
datetime.now():返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间
datetime.fromtimestamp(timestamp):根据时间戮创建一个datetime对象,参数tz指定时区信息;
datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
datetime.combine(date,time):根据date对象和time对象,创建一个datetime对象;
datetime.strptime(date_string,format):将格式字符串转换为datetime对象;

实例属性和方法

dt = datetime()
"属性"
dt.year、dt.month、dt.day:获取年、月、日;
dt.hour、dt.minute、dt.second、dt.microsecond:获取时、分、秒、微秒;

"方法"
dt.date():获取date对象;
dt.time():获取time对象;
dt.replace():传入指定的year或month或day或hour或minute或second或microsecond,生成一个新日期datetime对象,但不改变原有的datetime对象;
dt.timetuple():返回时间元组struct_time格式的日期;
dt.utctimetuple():返回时间元组struct_time格式的日期; # 这个没什么用 
dt.toordinal():返回1年1月1日开始至今的天数; # 了解就行,用处不大
dt.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
dt.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
dt.isocalendar():返回(year,week,weekday)格式的元组;
dt.isoformat():返回固定格式如'YYYY-MM-DD HH:MM:SS’的字符串;
dt.ctime():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));  # 了解就行,用处不大
dt.strftime(format):传入任意格式符,可以输出任意格式的日期表示形式。
dt.timestamp():返回该时间的timestamp(秒)

使用

时间转换字符

在这里插入图片描述

strftime()

用于将时间转换为固定格式的字符串

from datetime import datetime

# 获取当前时间
dt = datetime.now()
# 转换为指定格式字符串
str1 = dt.strftime('%Y-%m-%d %H:%M:%S')
str2 = dt.strftime('%y-%m-%d %H:%M:%S')

print(str1)
print(str2)

'''
2022-02-18 09:55:14
22-02-18 09:55:14
'''

datetime()

datetime的__new__方法,用于生成指定时间的datetime实例

from datetime import datetime

dt = datetime(2011,2,3,4,5,6)

print(dt)

'''
2011-02-03 04:05:06
'''

strptime()

用于将时间字符串,按照格式转换为datetime实例

from datetime import datetime

dt = datetime.strptime('2011,2,3,4,5,6','%Y,%m,%d,%H,%M,%S')

print(dt)

'''
2011-02-03 04:05:06
'''

timestamp()

在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp(时间戳)。在java等语言中,timestamp取的是整数毫秒数,在python中,timstamp是浮点型秒数

datetime to timestamp
from datetime import datetime

dt = datetime(2021,2,3,4,5,6)

ts = dt.timestamp()

print(ts)
print(type(ts))
'''
1612296306.0
<class 'float'>
'''
timestamp to datetime
from datetime import datetime

dt = datetime.fromtimestamp(1612296306.0)

print(dt)

'''
2021-02-03 04:05:06
'''

date类

静态属性和方法

"属性"
max:date对象能够表示的最大时间;
min:date对象能够表示的最小时间;
resolution:date对象表示时间的最小单位,这里指的是天;

"方法"
today():返回本地时间的一个date对象;
fromtimestamp(timestamp):给定一个时间戳,返回一个date对象;# 这个函数很有用

实例属性和方法

d = date()
"属性"
d.year、d.month、d.day:年、月、日;

"方法"
d.replace(year=,month=,day=):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
d.timetuple():返回时间元组struct_time格式的日期;
d.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
d.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
d.isocalendar():返回(year,week,weekday)格式的元组;
d.isoformat():返回格式如'YYYY-MM-DD'的字符串;
d.strftime(format):传入任意格式符,可以输出任意格式的日期表示形式;

time类

静态属性和方法

time.min:time类所能表示的最小时间。
time.max:time类所能表示的最大时间。
time.resolution:time类表示时间的最小单位,这里是1微秒;

实例属性和方法

t = time()
"属性"
t.hour、t.minute、t.second、t.microsecond:时、分、秒、微秒;

"方法"
t.replace(hour=,minute=,second=,microsecond=):生成一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性。(原有对象仍保持不变)  
t.isoformat():返回型如"HH:MM:SS"格式的字符串时间表示;
t.strftime(format):传入任意格式符,可以输出任意格式的时间表示形式;

timedelta类

使用timedelta可以很方便的在日期上做天days,小时hour,分钟minute,秒second,毫秒millisecond,微妙的时间计算microsecond。如果要进行年、月的加减,则需要另外的办法。

但是这个类的使用,一定要结合date类的对象 或 datetime类的对象使用。也就是说,一定是基于这两个类的对象,进行时间的加、减。

注意:timedelta不能单独和time类的对象结合使用

和date类结合

date类主要是用于处理年、月、日的,因此对该对象进行时间的加、减,主要是做“日(天数)”的加减。

from datetime import date,timedelta

d = date(2021,2,3)
print('今天:%s' % d)

yest = d + timedelta(days = -1)
print('昨天:%s' % yest)
tomo = d + timedelta(days = 1)
print('明天:%s' % tomo)

'''
今天:2021-02-03
昨天:2021-02-02
明天:2021-02-04
'''

和datetime类结合

datetime类主要是用于处理年、月、日、时、分、秒、毫秒、微妙的,因此对该对象进行时间的加、减,主要做“日(天数)”、“时”、“分”、“秒”、“毫秒”、“微秒”、的加减。

from datetime import datetime,timedelta

dt = datetime(2022,2,2,2,2,2)
print('现在:%s' % dt)

dt1 = dt + timedelta(hours = 1)
print('一小时后:%s' % dt1)
dt2 = dt + timedelta(hours = -1)
print('一小时前:%s' % dt2)
dt3 = dt + timedelta(seconds = 1)
print('一秒钟后:%s' % dt3)
dt4 = dt + timedelta(seconds = -1)
print('一秒钟前:%s' % dt4)
dt5 = dt + timedelta(minutes = 1)
print('一分钟后:%s' % dt5)
dt6 = dt + timedelta(minutes = -1)
print('一分钟前:%s' % dt6)
dt7 = dt + timedelta(days = 1)
print('一天后:%s' % dt7)
dt8 = dt + timedelta(minutes = -1)
print('一天前:%s' % dt8)

'''
现在:2022-02-02 02:02:02
一小时后:2022-02-02 03:02:02
一小时前:2022-02-02 01:02:02
一秒钟后:2022-02-02 02:02:03
一秒钟前:2022-02-02 02:02:01
一分钟后:2022-02-02 02:03:02
一分钟前:2022-02-02 02:01:02
一天后:2022-02-03 02:02:02
一天前:2022-02-02 02:01:02
'''

计算两个日期相隔天数

date提供方法__sub____rsub__两个方法,计算天数,返回的是timedelta实例

from datetime import date

d1 = date(2021,2,3)
d2 = date(2022,3,5)
#sub计算的是d2 - d1的天数
delta1 = d2.__sub__(d1)

print('%s和%s相隔%s天' % (d2,d1,delta1.days))
#rsub计算的是d1 - d2的天数
delta2 = d2.__rsub__(d1)

print('%s和%s相隔%s天' % (d2,d1,delta2.days))

'''
2022-03-05和2021-02-03相隔395天
2022-03-05和2021-02-03相隔-395天
'''