一步一步学Python3(小学生也适用) 第二十七篇: Python datetime 模块上

Python中提供了多个用于对日期和时间进行操作的内置模块:time模块、datetime模块和calendar模块。其中time模块上一篇我们已经学习了其基础用法。这一篇我们将学习功能更强大,接口更直观、易用的datetime模块。

datetime模块

datetime模块提供了处理日期和时间的类。相当于date和time的结合。

一、datetime模块中定义的类

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

类名称描述
datetime.date表示日期,常用的属性有:year,month,day
datetime.time表时时间,常用属性有:hour,minute,second,microsecond
datetime.datetime表示日期时间
datetime.timedelta表示两上date、time、datetime实例之间的时间间隔,最小单位微秒
datetime.tzinfo时区相关信息对狗日的的抽象基类
datetime.timezone实现tzinfo抽象基类的类,表示与UTC的固定偏移量
二、datetime.date 类
datetime.date(year, month, day)
from datetime import date
import datetime

print(date.max)
print(datetime.date.max)

print(date.min)
print(datetime.date.min)

运行结果:

9999-12-31
9999-12-31
0001-01-01
0001-01-01

上述代码,我们使用了import 和from…import导入模块,及模块中的类。并且返回了类中能使用的最大和最小日期。

import time 
from datetime import date
#获取今天日期
print(date.today())
print(type(date.today()))
print(time.time())
print(type(time.time()))
#把time.time()转换成datetime.today()
print(date.fromtimestamp(time.time()))
print(type(date.fromtimestamp(time.time())))

运行结果:

2020-11-07
<class 'datetime.date'>
1604741353.4290214
<class 'float'>
2020-11-07
<class 'datetime.date'>

上述代码可以使time模块中time.time()转换为datetime模块datetime.date.today()中的日期

from datetime import date
#获取今天日期
print(date.today())
print(date.today().year)
print(date.today().month)
print(date.today().day)

运行结果:

2020-11-07
2020
11
7

通过datetime.date.today()获取当天日期,并且可分别获取年月日year,month,day

from datetime import date
print(date.today())
print(date.today().replace(2022))
print(date.today().replace(2022,2))
print(date.today().replace(2022,2,4))

运行结果:

2020-11-07
2022-11-07
2022-02-07
2022-02-04

datetime.date.today().replace()进行日期替换

from datetime import date
import time
print(date.today().timetuple())
print(type(date.today().timetuple()))
print(time.localtime())
print(type(time.localtime()))

运行结果:

time.struct_time(tm_year=2020, tm_mon=11, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=312, tm_isdst=-1)
<class 'time.struct_time'>
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=7, tm_hour=17, tm_min=42, tm_sec=12, tm_wday=5, tm_yday=312, tm_isdst=0)
<class 'time.struct_time'>

date.today().timetuple()返回time.localtime()对应的time.struct_time对象

from datetime import date
print(date.today().toordinal())
print(date.today().weekday())
print(date.today().isoweekday())
print(date.today().isocalendar())
print(date.today().ctime())

运行结果:

737736
5
6
(2020, 45, 6)
Sat Nov  7 00:00:00 2020

上述使用方法,请看下表

date.today().toordinal()返回日期是是自 0001-01-01 开始的第多少天
date.today().weekday()返回日期是星期几,[0, 6],0表示星期一
date.today().isoweekday()返回日期是星期几,[1, 7], 1表示星期一
date.today().isocalendar()返回一个元组,格式为:(year, weekday, isoweekday)
date.today().isoformat()返回‘YYYY-MM-DD’格式的日期字符串
date.today().strftime(format)返回一个表示日期的字符串,相当于 time 模块的 time.ctime(time.mktime(d.timetuple()))
from datetime import date
print(date.today())
print(type(date.today))
print(date.today().isoformat())
print(type(date.today().isoformat()))
print(date.today().strftime('%Y-%m-%d'))
print(type(date.today().strftime('%Y-%m-%d')))
print(date.today().strftime("%A %d. %B %Y"))
print(date.today().strftime("%a %d. %b %Y"))
2020-11-07
<class 'builtin_function_or_method'>
2020-11-07
<class 'str'>
2020-11-07
<class 'str'>
Saturday 07. November 2020
Sat 07. Nov 2020

datetime.date.today().strftime()返回的是一个日期字符串。由上例我们看到,能返回各种日期样式。

三、datetime.time 类

time对象表示一天中的一个时间,并且可以通过tzinfo对象进行调整

datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

所有的参数都是可选的;tzinfo 可以是 None 或者 tzinfo 子类的实例对象;其余的参数可以是整数,并且在以下范围内:

  • 0 <= hour < 24
  • 0 <= minute < 60
  • 0 <= second < 60
  • 0 <= microsecond < 1000000

注:如果参数超出范围,将引发 ValueError 异常

time 类属性

  • time.min - time 对象所能表示的最早时间,time(0, 0, 0, 0)
  • time.max - time 对象所能表示的最晚时间,time(23, 59, 59, 999999)
  • time.resolution - time 对象表示时间的最小单位,在这里是 1 毫秒,timedelta(microseconds=1)
对象方法/属性名称描述
time.hour
time.minute
time.second
time.microsecond微秒
time.tzinfo返回传递给time构造方法的tzinfo对象,如果该参数未给出,则返回None
time.replace()生成并返回一个新的时间对象,原时间对象不变
time.isoformat()返回一个‘HH:MM:SS.%f’格式的时间字符串
time.strftime()返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同
from datetime import time
print(time.max)
print(time.min)
print(time())
print(type(time()))
print(time(23, 59, 59, 999999))
print(type(time(23, 59, 59, 999999)))

运行结果:

23:59:59.999999
00:00:00
00:00:00
<class 'datetime.time'>
23:59:59.999999
<class 'datetime.time'>

datetime.time(23, 59, 59, 999999)返回一个datetime.time类型,23为小时,59分,59秒,9999为微秒

from datetime import time
t = time(22,58,59,8888)
print(t)
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
print(t.tzinfo)

运行结果:

22:58:59.008888
22
58
59
8888
None

默认tzinfo为None; mircosecond为微秒,一秒等于1000000微秒

from datetime import time
t = time(22,58,59,8888)
print(t)
print(t.replace(20))
print(t.isoformat())
print(t.strftime('%H%M%S'))
print(t.strftime('%H:%M:%S.%f'))

运行结果:

22:58:59.008888
20:58:59.008888
22:58:59.008888
225859
22:58:59.008888

datetime.time.replace()并不会改变原来的time()值;

三、datetime.datetime类

datetime类的定义

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

year, month 和 day是必须要传递的参数, tzinfo可以是None或tzinfo子类的实例。

各参数的取值范围:

参数名称取值范围
year[MINYEAR, MAXYEAR]
month[1, 12]
day[1, 指定年份的月份中的天数]
hour[0, 23]
minute[0, 59]
second[0, 59]
microsecond[0, 1000000]
tzinfotzinfo的子类对象,如timezone类的实例

如果一个参数超出了这些范围,会引起ValueError异常

类方法和属性

类方法/属性名称描述
datetime.today()返回一个表示当前本期日期时间的datetime对象
datetime.now([tz])返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上
datetime.utcnow()返回当前utc日期时间的datetime对象
datetime.fromtimestamp(timestamp[, tz])根据指定的时间戳创建一个datetime对象
datetime.utcfromtimestamp(timestamp)根据指定的时间戳创建一个datetime对象
datetime.combine(date, time)把指定的date和time对象整合成一个datetime对象
datetime.strptime(date_str, format)将时间字符串转换为datetime对象

对象方法和属性

对象方法/属性名称描述
dt.year, dt.month, dt.day年、月、日
dt.hour, dt.minute, dt.second时、分、秒
dt.microsecond, dt.tzinfo微秒、时区信息
dt.date()获取datetime对象对应的date对象
dt.time()获取datetime对象对应的time对象, tzinfo 为None
dt.timetz()获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同
dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])生成并返回一个新的datetime对象,如果所有参数都没有指定,则返回一个与原datetime对象相同的对象
dt.timetuple()返回datetime对象对应的tuple(不包括tzinfo)
dt.utctimetuple()返回datetime对象对应的utc时间的tuple(不包括tzinfo)
dt.toordinal()同date对象
dt.weekday()同date对象
dt.isocalendar()同date独享
dt.isoformat([sep])返回一个‘%Y-%m-%d
dt.ctime()等价于time模块的time.ctime(time.mktime(d.timetuple()))
dt.strftime(format)返回指定格式的时间字符串
from datetime import datetime
print(datetime.today())
print(type(datetime.today()))
print(datetime.now())
print(type(datetime.now()))
print(datetime.utcnow())
2020-11-07 21:30:21.862857
<class 'datetime.datetime'>
2020-11-07 21:30:21.863879
<class 'datetime.datetime'>
2020-11-07 13:30:21.864850
<class 'datetime.datetime'>

都返回datetime.datetime类型

from datetime import datetime
import time
print(datetime.fromtimestamp(time.time()))
print(type(datetime.fromtimestamp(time.time())))
print(datetime.utcfromtimestamp(time.time()))
print(type(datetime.utcfromtimestamp(time.time())))

运行结果:

2020-11-07 21:35:54.771599
<class 'datetime.datetime'>
2020-11-07 13:35:54.771599
<class 'datetime.datetime'>

提供了把time.time()转换为datetime.datetime类型的方法

from datetime import datetime,time,date
d = datetime.combine(date.today(), time(20, 58, 59, 5858))
print(d)
print(type(d))
dt = datetime.now()
print(dt)
print(dt.year)
print(dt.month)
print(dt.day)
print(dt.hour)
print(dt.minute)
print(dt.second)
print(dt.microsecond)

运行结果:

2020-11-07 20:58:59.005858
<class 'datetime.datetime'>
2020-11-07 21:44:24.419034
2020
11
7
21
44
24
419034

通过datetime.datetime类型,可以求得年月日时分秒等

from datetime import datetime
dt=datetime.today()
print(dt.tzinfo)
print(dt.timestamp())
print(type(dt.timestamp()))
print(dt.date())
print(type(dt.date()))
print(dt.time())
print(type(dt.time()))
print(dt.timetz())
print(type(dt.timetz()))

运行结果:

None
1604757024.795844
<class 'float'>
2020-11-07
<class 'datetime.date'>
21:50:24.795844
<class 'datetime.time'>
21:50:24.795844
<class 'datetime.time'>

datetime.datetime转化为其他类型

from datetime import datetime
dt=datetime.today()
print(dt.timetuple())
print(type(dt.timetuple()))
print(dt.toordinal())
print(dt.weekday())
print(dt.isocalendar())
print(dt.isoformat())
print(dt.isoformat(sep='/'))
print(dt.isoformat(sep=' '))
print(dt.ctime())

运行结果:

time.struct_time(tm_year=2020, tm_mon=11, tm_mday=7, tm_hour=21, tm_min=54, tm_sec=42, tm_wday=5, tm_yday=312, tm_isdst=-1)
<class 'time.struct_time'>
737736
5
(2020, 45, 6)
2020-11-07T21:54:42.278062
2020-11-07/21:54:42.278062
2020-11-07 21:54:42.278062
Sat Nov  7 21:54:42 2020
结束语:

这一篇内容先学习到这里,datetime模块还有比较重要timedelta没讲。就留到下一篇再讲,同时下一篇将会复习及总节一个比较重要的知识点strftime()和strptime()

Python中提供了多个用于对日期和时间进行操作的内置模块:time模块、datetime模块和calendar模块。其中time模块上一篇我们已经学习了其基础用法。这一篇我们将学习功能更强大,接口更直观、易用的datetime模块。

datetime模块

datetime模块提供了处理日期和时间的类。相当于date和time的结合。

一、datetime模块中定义的类

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

类名称描述
datetime.date表示日期,常用的属性有:year,month,day
datetime.time表时时间,常用属性有:hour,minute,second,microsecond
datetime.datetime表示日期时间
datetime.timedelta表示两上date、time、datetime实例之间的时间间隔,最小单位微秒
datetime.tzinfo时区相关信息对狗日的的抽象基类
datetime.timezone实现tzinfo抽象基类的类,表示与UTC的固定偏移量
二、datetime.date 类
datetime.date(year, month, day)
from datetime import date
import datetime

print(date.max)
print(datetime.date.max)

print(date.min)
print(datetime.date.min)

运行结果:

9999-12-31
9999-12-31
0001-01-01
0001-01-01

上述代码,我们使用了import 和from…import导入模块,及模块中的类。并且返回了类中能使用的最大和最小日期。

import time 
from datetime import date
#获取今天日期
print(date.today())
print(type(date.today()))
print(time.time())
print(type(time.time()))
#把time.time()转换成datetime.today()
print(date.fromtimestamp(time.time()))
print(type(date.fromtimestamp(time.time())))

运行结果:

2020-11-07
<class 'datetime.date'>
1604741353.4290214
<class 'float'>
2020-11-07
<class 'datetime.date'>

上述代码可以使time模块中time.time()转换为datetime模块datetime.date.today()中的日期

from datetime import date
#获取今天日期
print(date.today())
print(date.today().year)
print(date.today().month)
print(date.today().day)

运行结果:

2020-11-07
2020
11
7

通过datetime.date.today()获取当天日期,并且可分别获取年月日year,month,day

from datetime import date
print(date.today())
print(date.today().replace(2022))
print(date.today().replace(2022,2))
print(date.today().replace(2022,2,4))

运行结果:

2020-11-07
2022-11-07
2022-02-07
2022-02-04

datetime.date.today().replace()进行日期替换

from datetime import date
import time
print(date.today().timetuple())
print(type(date.today().timetuple()))
print(time.localtime())
print(type(time.localtime()))

运行结果:

time.struct_time(tm_year=2020, tm_mon=11, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=312, tm_isdst=-1)
<class 'time.struct_time'>
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=7, tm_hour=17, tm_min=42, tm_sec=12, tm_wday=5, tm_yday=312, tm_isdst=0)
<class 'time.struct_time'>

date.today().timetuple()返回time.localtime()对应的time.struct_time对象

from datetime import date
print(date.today().toordinal())
print(date.today().weekday())
print(date.today().isoweekday())
print(date.today().isocalendar())
print(date.today().ctime())

运行结果:

737736
5
6
(2020, 45, 6)
Sat Nov  7 00:00:00 2020

上述使用方法,请看下表

date.today().toordinal()返回日期是是自 0001-01-01 开始的第多少天
date.today().weekday()返回日期是星期几,[0, 6],0表示星期一
date.today().isoweekday()返回日期是星期几,[1, 7], 1表示星期一
date.today().isocalendar()返回一个元组,格式为:(year, weekday, isoweekday)
date.today().isoformat()返回‘YYYY-MM-DD’格式的日期字符串
date.today().strftime(format)返回一个表示日期的字符串,相当于 time 模块的 time.ctime(time.mktime(d.timetuple()))
from datetime import date
print(date.today())
print(type(date.today))
print(date.today().isoformat())
print(type(date.today().isoformat()))
print(date.today().strftime('%Y-%m-%d'))
print(type(date.today().strftime('%Y-%m-%d')))
print(date.today().strftime("%A %d. %B %Y"))
print(date.today().strftime("%a %d. %b %Y"))
2020-11-07
<class 'builtin_function_or_method'>
2020-11-07
<class 'str'>
2020-11-07
<class 'str'>
Saturday 07. November 2020
Sat 07. Nov 2020

datetime.date.today().strftime()返回的是一个日期字符串。由上例我们看到,能返回各种日期样式。

三、datetime.time 类

time对象表示一天中的一个时间,并且可以通过tzinfo对象进行调整

datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

所有的参数都是可选的;tzinfo 可以是 None 或者 tzinfo 子类的实例对象;其余的参数可以是整数,并且在以下范围内:

  • 0 <= hour < 24
  • 0 <= minute < 60
  • 0 <= second < 60
  • 0 <= microsecond < 1000000

注:如果参数超出范围,将引发 ValueError 异常

time 类属性

  • time.min - time 对象所能表示的最早时间,time(0, 0, 0, 0)
  • time.max - time 对象所能表示的最晚时间,time(23, 59, 59, 999999)
  • time.resolution - time 对象表示时间的最小单位,在这里是 1 毫秒,timedelta(microseconds=1)
对象方法/属性名称描述
time.hour
time.minute
time.second
time.microsecond微秒
time.tzinfo返回传递给time构造方法的tzinfo对象,如果该参数未给出,则返回None
time.replace()生成并返回一个新的时间对象,原时间对象不变
time.isoformat()返回一个‘HH:MM:SS.%f’格式的时间字符串
time.strftime()返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同
from datetime import time
print(time.max)
print(time.min)
print(time())
print(type(time()))
print(time(23, 59, 59, 999999))
print(type(time(23, 59, 59, 999999)))

运行结果:

23:59:59.999999
00:00:00
00:00:00
<class 'datetime.time'>
23:59:59.999999
<class 'datetime.time'>

datetime.time(23, 59, 59, 999999)返回一个datetime.time类型,23为小时,59分,59秒,9999为微秒

from datetime import time
t = time(22,58,59,8888)
print(t)
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
print(t.tzinfo)

运行结果:

22:58:59.008888
22
58
59
8888
None

默认tzinfo为None; mircosecond为微秒,一秒等于1000000微秒

from datetime import time
t = time(22,58,59,8888)
print(t)
print(t.replace(20))
print(t.isoformat())
print(t.strftime('%H%M%S'))
print(t.strftime('%H:%M:%S.%f'))

运行结果:

22:58:59.008888
20:58:59.008888
22:58:59.008888
225859
22:58:59.008888

datetime.time.replace()并不会改变原来的time()值;

三、datetime.datetime类

datetime类的定义

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

year, month 和 day是必须要传递的参数, tzinfo可以是None或tzinfo子类的实例。

各参数的取值范围:

参数名称取值范围
year[MINYEAR, MAXYEAR]
month[1, 12]
day[1, 指定年份的月份中的天数]
hour[0, 23]
minute[0, 59]
second[0, 59]
microsecond[0, 1000000]
tzinfotzinfo的子类对象,如timezone类的实例

如果一个参数超出了这些范围,会引起ValueError异常

类方法和属性

类方法/属性名称描述
datetime.today()返回一个表示当前本期日期时间的datetime对象
datetime.now([tz])返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上
datetime.utcnow()返回当前utc日期时间的datetime对象
datetime.fromtimestamp(timestamp[, tz])根据指定的时间戳创建一个datetime对象
datetime.utcfromtimestamp(timestamp)根据指定的时间戳创建一个datetime对象
datetime.combine(date, time)把指定的date和time对象整合成一个datetime对象
datetime.strptime(date_str, format)将时间字符串转换为datetime对象

对象方法和属性

对象方法/属性名称描述
dt.year, dt.month, dt.day年、月、日
dt.hour, dt.minute, dt.second时、分、秒
dt.microsecond, dt.tzinfo微秒、时区信息
dt.date()获取datetime对象对应的date对象
dt.time()获取datetime对象对应的time对象, tzinfo 为None
dt.timetz()获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同
dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])生成并返回一个新的datetime对象,如果所有参数都没有指定,则返回一个与原datetime对象相同的对象
dt.timetuple()返回datetime对象对应的tuple(不包括tzinfo)
dt.utctimetuple()返回datetime对象对应的utc时间的tuple(不包括tzinfo)
dt.toordinal()同date对象
dt.weekday()同date对象
dt.isocalendar()同date独享
dt.isoformat([sep])返回一个‘%Y-%m-%d
dt.ctime()等价于time模块的time.ctime(time.mktime(d.timetuple()))
dt.strftime(format)返回指定格式的时间字符串
from datetime import datetime
print(datetime.today())
print(type(datetime.today()))
print(datetime.now())
print(type(datetime.now()))
print(datetime.utcnow())
2020-11-07 21:30:21.862857
<class 'datetime.datetime'>
2020-11-07 21:30:21.863879
<class 'datetime.datetime'>
2020-11-07 13:30:21.864850
<class 'datetime.datetime'>

都返回datetime.datetime类型

from datetime import datetime
import time
print(datetime.fromtimestamp(time.time()))
print(type(datetime.fromtimestamp(time.time())))
print(datetime.utcfromtimestamp(time.time()))
print(type(datetime.utcfromtimestamp(time.time())))

运行结果:

2020-11-07 21:35:54.771599
<class 'datetime.datetime'>
2020-11-07 13:35:54.771599
<class 'datetime.datetime'>

提供了把time.time()转换为datetime.datetime类型的方法

from datetime import datetime,time,date
d = datetime.combine(date.today(), time(20, 58, 59, 5858))
print(d)
print(type(d))
dt = datetime.now()
print(dt)
print(dt.year)
print(dt.month)
print(dt.day)
print(dt.hour)
print(dt.minute)
print(dt.second)
print(dt.microsecond)

运行结果:

2020-11-07 20:58:59.005858
<class 'datetime.datetime'>
2020-11-07 21:44:24.419034
2020
11
7
21
44
24
419034

通过datetime.datetime类型,可以求得年月日时分秒等

from datetime import datetime
dt=datetime.today()
print(dt.tzinfo)
print(dt.timestamp())
print(type(dt.timestamp()))
print(dt.date())
print(type(dt.date()))
print(dt.time())
print(type(dt.time()))
print(dt.timetz())
print(type(dt.timetz()))

运行结果:

None
1604757024.795844
<class 'float'>
2020-11-07
<class 'datetime.date'>
21:50:24.795844
<class 'datetime.time'>
21:50:24.795844
<class 'datetime.time'>

datetime.datetime转化为其他类型

from datetime import datetime
dt=datetime.today()
print(dt.timetuple())
print(type(dt.timetuple()))
print(dt.toordinal())
print(dt.weekday())
print(dt.isocalendar())
print(dt.isoformat())
print(dt.isoformat(sep='/'))
print(dt.isoformat(sep=' '))
print(dt.ctime())

运行结果:

time.struct_time(tm_year=2020, tm_mon=11, tm_mday=7, tm_hour=21, tm_min=54, tm_sec=42, tm_wday=5, tm_yday=312, tm_isdst=-1)
<class 'time.struct_time'>
737736
5
(2020, 45, 6)
2020-11-07T21:54:42.278062
2020-11-07/21:54:42.278062
2020-11-07 21:54:42.278062
Sat Nov  7 21:54:42 2020
结束语:

这一篇内容先学习到这里,datetime模块还有比较重要timedelta没讲。就留到下一篇再讲,同时下一篇将会复习及总节一个比较重要的知识点strftime()和strptime()

更多Python知识请关注公从号:老树Python
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值