time模块用于取得UNIX纪元时间戳,并加以处理。但是,如果以方便的格式显示日期,或对日期进行算数运算,就应该使用datetime模块。
目录
1. datetime数据类型
1) datetime.datetime.now()表示特定时刻
2)datetime.datetime.fromtimestamp()转换时间戳
3)用于比较操作符
2. timedelta数据类型
1)timedelta数据类型表示一段时间
3. 将datetime对象转换为字符串 —— strftime()方法
4. 将字符串转换成datetime对象 —— strptime()函数
1. datetime数据类型
1) datetime.datetime.now()表示特定时刻
datetime模块有自己的datetime数据类型。datetime值表示一个特定的时刻,如下示例代码:
调用datetime.datetime.now()返回一个datetime对象,表示当前的日期和时间,根据当前计算机的时钟。这个对象包含当前时刻的年、月、日、时、分、秒和微秒。
也可以利用datetime.datetime()函数,向它传入代表年、月、日、时、分、秒的整数,得到特定时刻的datetime对象。这些整数将保存在datetime对象的year、month、day、hour、minute和second属性中。
2)datetime.datetime.fromtimestamp()转换时间戳
UNIX纪元时间戳可以通过datetime.datetime.fromtimestamp(),转换为datetime对象。
datetime对象的日期和时间将根据本地时区转换,如下示例代码:
由此可看出表达式datetime.datetime.now()和datetime.datetime.fromtimestamp(time.time())做的事情相同,都是返回当前时刻的datetime对象。
3)用于比较操作符
datetime对象可以用比较操作符进行比较,弄清楚谁在前面。后面的datetime对象是“更大”的值,如下:
2. timedelta数据类型
1)timedelta数据类型表示一段时间
datetime模块还提供了timedelta数据类型,表示一段时间,而不是一个时刻:
- 用datetime.timedelta()函数创建timedelta对象,此函数接收关键字参数weeks、days、hours、minutes、seconds、milliseconds和microseconds,这些关键字参数都是可选的。没有month和year关键字参数,因为“月”和“年”是可变的时间,依赖于特定月份或年份。
- timedelta对象拥有的总时间以天、秒、微妙来表示,这些数字分别保存在days、seconds和microseconds属性中。
- total_seconds()方法用于timedelta对象,返回timedelta对象表示的秒数。
- 将一个timedelta对象传入str(),将返回格式良好的、人类可读的字符串。
2)进行日期运算
算数运算符可以用于对datetime值进行日期运算。例如,要计算今天之后1000天的日期:
如代码所示,Python将完成日期运算,弄清楚当前日期之后的1000天。这很有用,我们不用记住每个月有多少天、闰年的因素和其他棘手的细节,datetime模块会处理所有这些问题。
利用 + 和 - 运算符,timedelta对象与datetime对象或其他timedelta对象相加或相减。
利用 * 和 / 运算符,timedelta对象可以乘以或除以整数或浮点数。示例如下:
3. 将datetime对象转换为字符串 —— strftime()方法
UNIX纪元时间戳和datetime对象对人类来说都不是很友好可读。利用strftime()方法,可以将datetime对象显示为字符串。( strftime()函数命中的 f 表示格式,format)。
strftime()方法使用的指令类似于Python的字符串格式化。下表列出了完整的strftime()指令:
strftime()指令 | |
strftime指令 | 含义 |
%Y | 带世纪的年份,例如'2014' |
%y | 不带世纪的年份,'00'至'99'(1970至2069) |
%m | 数字表示的月份,'01'至'12' |
%B | 完整的月份,例如'November' |
%b | 简写的月份,例如'Nov' |
%d | 一月中的第几天,'01'至'31' |
%j | 一年中的第几天,'001'至'366' |
%w | 一周中的第几天,'0'(周日)至'6'(周六) |
%A | 完整的周几,例如'Monday' |
%a | 简写的周几,例如'Mon' |
%H | 小时(24小时时钟),'00'至'23' |
%I | 小时(12小时时钟),'01'至'12' |
%M | 分,'00'至'59' |
%S | 秒,'00'至'59' |
%p | 'AM'或'PM' |
%% | 就是'%'字符 |
向strftime()传入一个定制的格式字符串,其中包含格式化指定(以及任何需要的斜线、冒号等),strftime()将返回一个格式化的字符串,表示datetime对象的信息。代码如下:
strftime(format)方法返回一个字符串,用format字符串中的定制格式来表示datetime对象表示的时间。
需要注意的是:strftime() 不是以 datetime.datetime 开始。
4. 将字符串转换成datetime对象 —— strptime()函数
如果有一个字符串的日期信息,如'2021/10/21 16:29:00'或'October 21, 2015', 需要转换为datetime对象,就用 datetime.datetime.strptime()函数。
strptime()函数与strftime()方法相反,但定制的格式字符串使用相同的指令,见上表strftime()指令。必须将格式字符串传入strptime(),这样它就知道如何解析和理解日期字符串。
strptime()函数命中的 p 表示解析,parse。示例代码如下:
strptime()需要传入两个参数,第一个参数是需要转换的字符串,第二个参数是第一个参数对应的定制格式字符串。
datetime.datetime.strptime(time_string, format)函数返回一个datetime对象,它的时刻由time_string指定,利用format字符串参数来解析。
需要注意的是:带有日期信息的字符串必须准确匹配定制的格式字符串,否则Python将抛出ValueError异常。