第十八天学Python:标准库(2):datetime模块

前天晚上风雨交加,随之而来的,则是新一轮的气温骤降。昨天晚上更是下起了雪来。说实话,记忆中上一次五月份下雪还是我特别特别小的时候。那时同样刚入5月,音乐老师望着窗外的五月飞雪,若有所思,然后一如既往地给我们讲了一个新的童话故事。
回到现在,Lib目录下的datetime模块为我们提供了非常多用于处理日期、时间等相关的操作类功能
在datetime模块的第1509行,我们看到,其中有一个名为“datetime”的类:
第十八天学Python:标准库(2):datetime模块_第1张图片
同样的,我们可以分别在第774行,和第1162行看见“date”类与“time”类
而一般情况下,datetime是包含了date与time的所有功能的。接下来,我们看一看datetime类里面都有些什么我们常用的方法
——————————————————————

声明:由于本期要用到"datetime"、“date”、“time”类,所以提前从datetim模块导入三者:(date与time类要在使用combine的时候用到)
另外,文中提过的行数仅为我这里看到的我的库文件里显示的行数,不代表所有

from datetime import datetime,date,time

  • now:获取此刻日期和时间
  • utcnow:获取UTC时间
  • timestamp:获取时间戳
  • fromtimestamp:由时间戳返回对应时间
  • ctime:获取指定日期的字符串
  • strptime:以字符串、以指定格式返回指定日期
  • timetuple:把时间转化为元组
  • isocalendar:获取ISO格式日期(元组)
  • combine:输入日期和时间,生成新的datetime对象

now:获取此刻日期和时间

>>> datetime.now()
datetime.datetime(2020, 5, 4, 10, 16, 34, 989483)

now()的返回值是当前的日期、时间,所以我们一般将其赋给一个变量:

>>> test_time = datetime.now()

值得注意的是,在datetime类中,now方法的描述如下:
在这里插入图片描述
这里有一个可选参数 “tz”,如果tz不是None,则它必须是“ tzinfo”子类的一个实例,并且返回的日期时间会转为tz时区。
“ tzinfo ”类在datetime模块的第1092行
第十八天学Python:标准库(2):datetime模块_第2张图片
这是一个基类,我们想实例化时应该定义它的子类然后再进行相应的操作。不过一般是不需要考虑now() 里的 tz 可选参数的。

utcnow:获取UTC时间

UTC时间是协调世界时,北京时间跟UTC时间相比差了八个小时

datetime.now();datetime.utcnow()
datetime.datetime(2020, 5, 4, 10, 54, 29, 199560)
datetime.datetime(2020, 5, 4, 2, 54, 29, 219561)

这里是为了方便才把两个语句写到一行用“;”隔开,在实际编程中,往往不推荐以这样的方式写程序。

timestamp:获取时间戳

时间戳相当于是这一刻时间的身份证,它能精确地表示时间。
timestamp返回的是一个浮点型的数据

>>> datetime.timestamp(test_time)
1588558594.989483

fromtimestamp:由时间戳返回对应时间

>>> datetime.fromtimestamp(1588558594.989483)
datetime.datetime(2020, 5, 4, 10, 16, 34, 989483)

同样,在fromtimestamp中也有一个“tz”可选参数,当它不为None时,同样必须是 tzinfo 子类的一个实例,并且会转到相应的时区
在这里插入图片描述

ctime:获取指定日期的字符串

>>> datetime.ctime(test_time)
'Mon May  4 10:16:34 2020'

strptime:以字符串、以指定格式返回指定日期

在刚刚我们获得了一个日期时间’Mon May 4 10:16:34 2020’后,我们同样可以反推出来一个datetime对象:

>>> a = datetime.strptime('20/5/4 10:16:34','%y/%d/%m %H:%M:%S')
>>> a
datetime.datetime(2020, 4, 5, 10, 16, 34)
>>> print(a)
2020-04-05 10:16:34

这里要注意的是,strptime要输入两个数,前者为自己制定的格式,而后者,则需要严格按照自己输入的格式把各个时间信息用相应的字符串替代,这里大概说一下有哪些常用的符号以及他们各自的含义:

符号 含义
%y 两位数年份
%Y 四位数年份
%m 月份
%d 天数
%H 24制小时
%I 12制小时
%M
%S
%p A.M.或者P.M.

分割 分割
%a 简写星期名
%A 完整星期名
%b 简写月份名
%B 完整月份名
%% "%"本身

timetuple:把时间转化为元组

>>> datetime.timetuple(test_time)
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=4, tm_hour=10, tm_min=16, tm_sec=34, tm_wday=0, tm_yday=125, tm_isdst=-1)

这么输出太长了,我们加个循环:

>>> for i in T:
	print(i)
2020
5
4
10
16
34
0
125
-1

isocalendar:获取ISO格式日期(元组)

>>> test_time = datetime.now()
>>> test_time.isocalendar()

combine:输入日期和时间,生成新的datetime对象

输入combine的有两个参数:date和time
第十八天学Python:标准库(2):datetime模块_第3张图片
我在初见它的时候,天真地以为是自己随便输入日期和时间就行,结果:
第十八天学Python:标准库(2):datetime模块_第4张图片
再看它的源代码才知道,原来date和time是个类:)
所以我们才需要导入date、time
然后:

>>> D = date(2009,5,7)
>>> T = time(10,25,30)
>>> print(datetime.combine(D,T))
2009-05-07 10:25:30

以前是照着书学的,书上的内容在combine只给了一个例子,也并没有说明date和time分别都是什么,当时并没有在意,反正程序不报错就完事了。后来闲的没事想起来它了,特意去看了下datetime模块里到底包含了什么。
——————————
除了以上说的这些,在datetime模块中还有很多的方法供我们使用,没有说到的就请各位自己去挖掘了:)
其实不用像我一样非得看着源码一点点找,在Python的官网中提供了索引,我们可以在官方索引中查找我们需要的模块的信息、使用说明,以及更新信息等等。像这个datetime模块也是在不同的版本经历了几次更新,这些内容都会在官网中说明。
第十八天学Python:标准库(2):datetime模块_第5张图片

——————————
我为什么非要看源码呢?对我来说,这类似以前用新的板子时读芯片手册和看官方库的感觉。可能这样路子比较野= =,但对我本人来说反而更有耐心去看这些内容,尽管会走很多弯路,但最后的效果比单纯的看视频或看书要略好一些。(不同的人有不同的学习方法)
——————————
我是康,希望做一名能帮助到各位的博主!在更新完Python系列后会根据时间安排再开机器学习或者算法系列,欢迎感兴趣的小伙伴与我共同学习,一起进步!下期再见!

你可能感兴趣的:(Python)