文章目录
一、datetime模块介绍
1.datetime包含的类
2.datetime包含的常量
二、date类
1.对象构成
获取当天的年月日
>>> from datetime import date
>>> today = date.today()
>>> today.year
2022
>>> today.month
3
>>> today.day
10
2、date对象中包含的方法与属性
1、用于日期比较大小的方法
>>> yesterday = date(today.year,today.month,today.day-1)
>>> yesterday
datetime.date(2022, 3, 9)
>>> yesterday.day
9
>>> yesterday.month
3
>>> yesterday.year
2022
>>> yesterday == today
False
>>> yesterday < today
True
>>> yesterday > today
False
2、获得二个日期相差多少天
计算结果的返回值类型为datetime.timedelta,只能返回多少天
>>> yesterday - today
datetime.timedelta(days=-1)
>>> (yesterday - today).days
-1
3、ISO标准化日期
isocalendar().week 返回的是距离去年年底过了多少周
isocalendar().weekday 返回的是周几 (1-7)
>>> today.isocalendar()
datetime.IsoCalendarDate(year=2022, week=10, weekday=4)
属性可以通过索引访问,也可以通过句点符访问year、week、weekday
>>> today
datetime.date(2022, 3, 10)
>>> today.isocalendar()
datetime.IsoCalendarDate(year=2022, week=10, weekday=4)
>>> today.isocalendar().year
2022
>>> today.isocalendar().week
10
>>> today.isocalendar().weekday
4
>>> today.isocalendar()[0]
2022
>>> today.isocalendar()[1]
10
>>> today.isocalendar()[2]
4
-
isoformat(…)
-
返回符合ISO 8601标准 (
YYYY-MM-DD
) 的日期字符串;
>>> today.isoformat()
'2022-03-10'
isoweekday(…): 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)
>>> today.isoweekday()
4
与isoweekday(…)相似的还有一个weekday(…)方法,只不过是weekday(…)方法返回的周一为 0, 周日为 6
>>> today.weekday()
3
4、其他方法与属性
1). timetuple(…):该方法为了兼容time.localtime(…)返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0:
tm_yday:表示的是从新的一年的元旦(零点)一共走过的天数
>>> from datetime import date
>>> a = date.today()
>>> a
datetime.date(2022, 3, 10)
>>> a.timetuple()
time.struct_time(tm_year=2022, tm_mon=3, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=69, tm_isdst=-1)
>>> 31 + 28 + 10
69
>>> a.timetuple().tm_year
2022
>>>
2).toordinal(…): 返回公元公历开始到现在的天数。公元1年1月1日为1
>>> a.toordinal()
738224
3). replace(…):返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产生新对象,不影响原date对象。
>>> a.replace(year=2010)
datetime.date(2010, 3, 10)
>>> a
datetime.date(2022, 3, 10)
4).resolution:date对象表示日期的最小单位。这里是天。
>>> a.resolution
datetime.timedelta(days=1)
>>> a.resolution.days
1
5).fromordinal(…):将Gregorian日历时间转换为date对象;Gregorian Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多。(就是把时间天数转换为date对象)
>>> date.fromordinal(a.toordinal())
datetime.date(2022, 3, 10)
6).fromtimestamp(…):根据给定的时间戮,返回一个date对象
>>> import time
>>> time.time()
1646920802.0949812
>>> date.fromtimestamp(time.time())
datetime.date(2022, 3, 10)
7).today(…):返回当前日期
>>> date.today()
datetime.date(2022, 3, 10)
8).max: date类能表示的最大的年、月、日的数值;min: date类能表示的最小的年、月、日的数值
>>> date.max
datetime.date(9999, 12, 31)
>>> date.min
datetime.date(1, 1, 1)
3、日期的字符串输出
1、如果你想将日期对象转化为字符串对象的话,可以用到__format__(…)方法以指定格式进行日期输出:
>>> a.__format__('%Y-%m-%d')
'2022-03-10'
>>> a.__format__('%Y/%m/%d')
'2022/03/10'
>>> a.__format__('%D')
'03/10/22'
等价于strftime
>>> a.strftime('%Y-%m-%d')
'2022-03-10'
2、如果只是相简单的获得日期的字符串,使用str(…)
>>> str(a)
'2022-03-10'
3、如果想要获得ctime样式的格式请使用ctime(…):
>>> a.ctime()
'Thu Mar 10 00:00:00 2022'
三、time类
(一)、time对象构成
>>> from datetime import time
>>> a = time(1,2,3,4)
>>> a.hour
1
>>> a.minute
2
>>> a.second
3
>>> a.microsecond
4
>>> a.tzinfo
(二)、time类中的方法和属性
1、比较时间大小
>>> a
datetime.time(1, 2, 3, 4)
>>> b = time(2,4,5,7)
>>> a > b
False
>>> a == b
False
>>> a <= b
True
2、判断时间对象是否非零,返回值为True/False:
>>> a == 0
False
>>> a != 0
True
3、其他属性
1)、max:最大的时间表示数值;min:最小的时间表示数值
>>> a.max
datetime.time(23, 59, 59, 999999)
>>> a.min
datetime.time(0, 0)
2)、resolution:时间间隔单位为分钟
>>> time.resolution
datetime.timedelta(microseconds=1)
>>> a.resolution
datetime.timedelta(microseconds=1)
>>> time.resolution.microseconds
1
(三)、时间的字符串输出
1、如果你想将时间对象转化为字符串对象的话,可以用到__format__(…)方法以指定格式进行时间输出
>>> a
datetime.time(1, 2, 3, 4)
>>> a.strftime('%H:%M:%S')
'01:02:03'
>>> a.__format__('%H:%M:%S')
'01:02:03'
2、ISO标准输出
如果要使输出的时间字符符合ISO标准,请使用isoformat(…):
>>> a.isoformat()
'01:02:03.000004'
3、如果只是相简单的获得时间的字符串,则使用str(…):
>>> str(a)
'01:02:03.000004'
四、datetime类
(一)、datetime对象构成
>>> a = datetime.today()
>>> a
datetime.datetime(2022, 3, 10, 22, 51, 59, 983579)
(二)、专属于datetime的方法和属性
1、 date(…):返回datetime对象的日期部分;time(…):返回datetime对象的时间部分:
>>> a = datetime.today()
>>> a.date()
datetime.date(2022, 3, 10)
>>> a.time()
datetime.time(22, 55, 22, 156704)
2、utctimetuple(…):返回UTC时间元组:
>>> a.utctimetuple()
time.struct_time(tm_year=2022, tm_mon=3, tm_mday=10, tm_hour=22, tm_min=55, tm_sec=22, tm_wday=3, tm_yday=69, tm_isdst=0)
3、combine(…):将一个date对象和一个time对象合并生成一个datetime对象:
>>> a
datetime.datetime(2022, 3, 10, 22, 55, 22, 156704)
>>> datetime.combine(a.date(),a.time())
datetime.datetime(2022, 3, 10, 22, 55, 22, 156704)
4、now(…):返回当前日期时间的datetime对象:
>>> datetime.now()
datetime.datetime(2022, 3, 10, 23, 0, 16, 227303)
5、utcnow(…):返回当前日期时间的UTC datetime对象:
>>> from datetime import datetime
>>> datetime.utcnow()
datetime.datetime(2022, 3, 11, 0, 19, 10, 558382)
6、strptime(…):根据string, format 2个参数,返回一个对应的datetime对象:注意这里的字符串必须用**‘-’分隔开,比如说’2017-3-22 15:25’**
>>> datetime.strptime('2017-3-22 15:25', '%Y-%m-%d %H:%M')
datetime.datetime(2017, 3, 22, 15, 25)
>>> datetime.strptime('2017-3-22','%Y-%m-%d')
datetime.datetime(2017, 3, 22, 0, 0)
7、utcfromtimestamp(…):UTC时间戳的datetime对象,时间戳值为time.time():
>>> import time
>>> datetime.utcfromtimestamp(time.time())
datetime.datetime(2022, 3, 11, 0, 25, 58, 512137)
五、timedelta类
timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)
六、日期计算实操
1.获取当前日期时间:
>>> from datetime import timedelta
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2022, 3, 12, 11, 18, 4, 273085)
>>> from datetime import date
>>> today = date.today()
>>> today
datetime.date(2022, 3, 12)
>>> now.date()
datetime.date(2022, 3, 12)
>>> now.time()
datetime.time(11, 18, 4, 273085)
2.获取上个月第一天和最后一天的日期:
>>> today
datetime.date(2022, 3, 12)
>>> last_day = date(today.year,today.month,1) - timedelta(1)
>>> last_day
datetime.date(2022, 2, 28)
>>> last_day = date(today.year,today.month,1) - timedelta(days=1)
>>> last_day
datetime.date(2022, 2, 28)
>>> first_day = date(today.year,today.month-1,1)
>>> first_day
datetime.date(2022, 2, 1)
3.获取时间差
时间差单位为秒,
>>> start_time = datetime.now()
>>> end_time = datetime.now()
>>> end_time - start_time
datetime.timedelta(seconds=8, microseconds=655820)
>>> (end_time - start_time).seconds
8
差值不只是可以查看相差多少秒,还可以查看天(days), 秒(seconds), 微秒(microseconds).
4.计算当前时间向后8个小时的时间
>>> d1 = datetime.now() + timedelta(hours=8)
>>> d1
datetime.datetime(2022, 3, 12, 19, 30, 4, 329954)
可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds).
5.计算上周一和周日的日期
>>> today
datetime.date(2022, 3, 12)
>>> today.isoweekday()
6
>>> today.weekday()
5
>>> last_sunday = today - timedelta(days=today.isoweekday())
>>> last_sunday
datetime.date(2022, 3, 6)
>>> last_monday = today - timedelta(days=today.isoweekday()+6)
>>> last_monday
datetime.date(2022, 2, 28)
6.计算指定日期当月最后一天的日期和本月天数
7.计算指定日期下个月当天的日期
8.获得本周一至今天的时间段并获得上周对应同一时间段