以不同格式显示日期和时间是程序中最常用到的功能。Python 提供了一个处理时间的标准函数库 datetime,它提供了一系列由简单到复杂的时间处理方法。
datetime 库可以从系统中获得时间,并以用户选择的格式输出。
datetime 库以格林威治时间为基础,每天由 3600X24 秒精准定义。该库包括两个常量:datetime.MINYEAR 与 datetime.MAXYEAR,分别表示 datetime 所能表示的最小、最大年份,值分别为 1 与 9999。
datetime 库以类的方式提供多种日期和时间表达方式。
(1) datetime.date:日期表示类,可以表示年、月、日等。
(2) datetime.time:时间表示类,可以表示小时、分钟、秒、毫秒等。
(3) datetime.dateime:日期和时间表示的类,功能覆盖 date 和 time 类。
(4) datetime.timedelta: 与时间间隔有关的类。
(5) datetime.tzinfo:与时区有关的信息表示类。
由于 datetime.daetime 类表达形式最为丰富,这里主要介绍这个类的使用。使用 datetime 类需要用 import 保留字,引用 datetime类的方式如下:
from datetime import datetime2. 拓展: 1970年1月1日
当代计算机系统都有一个计时功能,能够输出从格林威治标准时间 1970 年 1 月 1 日 00:00:00 开始到当下的时间计数,精确到秒,这是 UNIX 操作系统早期的设计习惯,后沿用到所有计算机系统中。
现在的计算机硬件和系统都是 64 位,如果用 64 位存储这个时间计数则最大可以表示距离 1970 年 1 月 1 日开始的 264 秒,1 年 365 天的总秒数约为 1.9x224 ,因此,64 位计算机系统可以将时间表示到约公元 239 年,相信我们的 N 代子孙,哪怕到地球毁灭那天都不用担心时间不准确了。
——为什么选择从 1970 年 1 月 1 日开始? ——无论选择从哪天开始, 都会有同样的问题, 不是吗?
3. datetime 库解析datetime 类 ( datetime.datetime 类,以下简称为 datetime 类) 的使用方式是首先创建一个 datetime 对象,然后通过对象的方法和属性显示时间。创建 datetime 对象有3种方法:datetime.now()、 datetime.utcnow() 和 datetime.datetime()。
1.使用 datetime.now() 获得当前日期和时间对象,使用方法如下:
datetime.now()
作用:返回一个 datetime 类型,表示当前的日期和时间,精确到微秒。 参数:无 调用该函数,执行结果如下:
from datetime import datetime today = datetime.now() print(today)
2022-05-01 20:32:41.772021
2.使用 datetime utcnow() 获得当前日期和时间对应的 UTC (世界标准时间) 时间对象,使用方法如下:
datetime.utcnow ()
作用:返回一个 datetime 类型,表示当前日期和时间的 UTC 表示,精确到微秒。 参数:无 调用该函数,执行结果如下:
from datetime import datetime today = datetime.utcnow() print(today)
2022-05-01 12:35:40.849860
3.datetime.now() 和 datetime utcnow() 都返回一个 datetime 类型的对象,也可以直接使用 datetime() 构造一个日期和时间对象, 使用方法如下:
datetime (year, month, day, hour=0, minute=0,second=0, microsecond=0)
作用:返回一个 datetime 类型,表示指定的日期和时间,可以精确到微秒。
参数如下:
year:指定的年份,MINYEAR <= year <= MAXYEAR
month:指定的月份,1 <= month <= 12
day:指定的日期,1 <= day <=月份所对应的日期上限
hour:指定的小时,0 <= hour < 24
minute:指定的分钟数,0 <= minute < 60
second:指定的秒数,0 <= second < 60
microsecond:指定的微秒数,0 <= microsecond < 1000000
其中,hour、minute、second、microsecond 参数可以全部或部分省略。
调用 datetime() 函数直接创建一个 datetime 对象,表示 2022 年 5 日 1 日 20:33,32 秒 7 微妙,执行结果如下:
from datetime import datetime someday = datetime(2022, 5, 1, 20, 43, 32, 7) print(someday)
2022-05-01 20:43:32.000007
到此,程序已经有了一个 datetime 对象,进一步可以利用这个对象的属性显示时间,为了区别 datetime 库名,采用上例中的 someday 代替生成的 datetime 对象,常用属性如下表所示。
属性描述someday.min固定返回 datetime 的最小时间对象,datetime(1,1,1,0,0)someday.max固定返回 datetime 的最大时间对象,datetime(9999,12,31,23,59,59,59,999999)someday.year返回 someday 包含的年份someday.month返回 someday 包含的月份someday.day返回 someday 包含的日期someday.hour返回 someday 包含的小时someday.minute返回 someday 包含的分钟someday.second返回 someday 包含的秒钟someday.microsecond返回 someday 包含的微妙值datetime 对象有 3 个常用的时间格式化方法,如下表所示
属性描述someday.isoformat()采用 ISO 8601 标准显示时间someday.isoweekday()根据日期计算星期后返回 1~7,对应星期一到星期日someday.strftime(format)根据格式化字符串 format 进行格式显示的方法isoformat() 和 isoweekday() 方法的使用如下:
from datetime import datetime today = datetime.now() print(today.isoformat()) print(today.isoweekday())
程序执行结果如下:
2022-05-01T21:00:28.392304
7
strftime() 方法是时间格式化最有效的方法,几乎可以以任何通用格式输出时间。例如下面的例子,用该方法输出特定格式时间。
from datetime import datetime today = datetime.now() print(today.strftime("%Y-%m-%d %H : %M : %S"))
程序执行结果如下:
2022-05-01 21 : 04 : 23
下表是 strftime() 方法的格式化控制符。
格式化字符串日期/时间值范围和实例%Y年份0001~9999%m月份01~12%B月名January~December%b月名缩写Jan~Dec%d日期01~31%A星期Monday~Sunday%a星期缩写Mon~Sun%H小时(24 h 制)00~23%M分钟00~59%S秒00~59%x日期月/日/年,例如,01/01/2022%X时间时 :分:秒,例如,19 : 09 : 31strftime() 格式化字符串的数字左侧会自动补零,上述格式也可以与 print() 的格式化函数起使用,例如:
from datetime import datetime now = datetime.now() print(now.strftime("%Y- %m- %d")) print(now.strftime("%A,%d. %B %Y %H: %M%p")) print("今天是 {0:%Y} 年 {0:%m} 月 {0:%d} 日".format(now))
程序执行结果如下:
2022- 05- 01
Sunday,01. May 2022 21: 21PM
今天是 2022 年 05 月 01 日
datetime 库主要用于对时间的表示,从格式化角度掌握 strftime() 函数已经能够处理很多情况了。建议读者在遇到需要处理时间的问题时采用 datetime 库,简化格式输出和时间的维护。