当前位置 : 主页 > 编程语言 > python >

Python datetime库如何使用

来源:互联网 收集:自由互联 发布时间:2023-07-30
1. datetime 库概述 以不同格式显示日期和时间是程序中最常用到的功能。 Python 提供了一个处理时间的标准函数库 datetime ,它提供了一系列由简单到复杂的时间处理方法。 datetime 库可以从
1. datetime 库概述

以不同格式显示日期和时间是程序中最常用到的功能。Python 提供了一个处理时间的标准函数库 datetime,它提供了一系列由简单到复杂的时间处理方法。

datetime 库可以从系统中获得时间,并以用户选择的格式输出。

datetime 库以格林威治时间为基础,每天由 3600X24 秒精准定义。该库包括两个常量:datetime.MINYEARdatetime.MAXYEAR,分别表示 datetime 所能表示的最小、最大年份,值分别为 19999

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 datetime
2. 拓展: 1970年1月1日

当代计算机系统都有一个计时功能,能够输出从格林威治标准时间 19701100:00:00 开始到当下的时间计数,精确到秒,这是 UNIX 操作系统早期的设计习惯,后沿用到所有计算机系统中。

现在的计算机硬件和系统都是 64 位,如果用 64 位存储这个时间计数则最大可以表示距离 197011 日开始的 264 秒,1365 天的总秒数约为 1.9x224 ,因此,64 位计算机系统可以将时间表示到约公元 239 年,相信我们的 N 代子孙,哪怕到地球毁灭那天都不用担心时间不准确了。

——为什么选择从 197011 日开始? ——无论选择从哪天开始, 都会有同样的问题, 不是吗?

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

其中,hourminutesecondmicrosecond 参数可以全部或部分省略。

调用 datetime() 函数直接创建一个 datetime 对象,表示 20225120:33327 微妙,执行结果如下:

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 : 31

strftime() 格式化字符串的数字左侧会自动补零,上述格式也可以与 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 库,简化格式输出和时间的维护。

上一篇:Python怎么实现链式调用
下一篇:没有了
网友评论