Python 基本日期和时间类型


在 Python 中操作日期和时间,可以使用名为 datetime 的模块。日期和时间对象有两种类型。类型分别是朴素类型和感知类型。

在朴素对象中,没有足够的信息来明确地将此对象与其他日期时间对象区分开来。在这种方法中,它使用协调世界时 (UTC)。

在感知类型对象中,包含有关算法和政治时间调整的不同信息。此类型的对象用于表示某些特定的时间点。

要使用此模块,我们应该使用以下方法导入它:

import datetime

此模块中包含不同的类、常量和方法。

常量如下:

序号 常量及描述
1

datetime.MINYEAR

它是可以应用于日期或日期时间对象的最小年份数。值为 0。

2

datetime.MAXYEAR

它是可以应用于日期或日期时间对象的最大年份数。值为 9999。

可用的数据类型如下:

序号 数据类型及描述
1

date

它是日期类型对象。它使用公历。它具有年份、月份、日期属性。

2

time

它是一个时间对象类。它独立于任何特定的一天。它具有小时、分钟、秒、微秒和 tzinfo 属性。

3

datetime

它是日期和时间的组合集合。

4

timedelta

它用于表示两个日期、时间或日期时间值之间的毫秒差。

5

tzinfo

它是一个抽象基类。它保存时区信息。它被 datetime 和 time 类使用。

6

timezone

在此类中,它实现了 tzinfo。它与 UTC 有一个固定的偏移量。

日期类型对象

日期对象表示一个日期。在日期中,有日期、月份和年份部分。它使用公历。根据此日历,第 1 年 1 月 1 日称为第 1 天,依此类推。

一些与日期相关的函数如下:

函数 date.date(year, month, day)

这是创建日期类型对象的构造函数。要创建日期,所有参数都必须是整数类型数据。年份必须在 MINYEAR 和 MAXYEAR 范围内。如果给定的日期无效,它将引发 ValueError 异常。

函数 date.today()

此函数用于返回当前本地日期。

函数 date.fromtimestamp(timestamp)

此函数用于从 POSIX 时间戳获取日期。如果时间戳值超出范围,它将引发 OverflowError 异常。

函数 date.fromordinal(ordinal)

此函数用于从前推格里高利历序数获取日期。它用于从第 1 年 1 月 1 日起的日期计数获取日期。

函数 date.toordinal()

此函数用于将日期返回到前推格里高利历序数。

函数 date.weekday()

此函数用于从日期返回一周中的日期作为整数。星期一为 0,星期二为 1,依此类推。

函数 date.isoformat()

此函数用于以 ISO 8601 格式字符串返回日期。格式为 YYYY-MM-DD。

示例代码

在线演示

import datetime as dt
new_date = dt.date(1998, 9, 5) #Store date 5th septemberm, 1998
print("The Date is: " + str(new_date))
print("Ordinal value of given date: " + str(new_date.toordinal()))
print("The weekday of the given date: " + str(new_date.weekday())) #Monday is 0
my_date = dt.date.fromordinal(732698) #Create a date from the Ordinal value.
print("The Date from ordinal is: " + str(my_date))
td = my_date - new_date #Create a timedelta object
print('td Type: ' + str(type(td)) + '\nDifference: ' + str(td))

输出

The Date is: 1998-09-05
Ordinal value of given date: 729637
The weekday of the given date: 5
The Date from ordinal is: 2007-01-22
td Type: <class 'datetime.timedelta'>
Difference: 3061 days, 0:00:00

时间对象

时间对象表示本地时间。在时间中,有小时、分钟、秒、微秒、tzinfo 部分。小时范围为 0 到 24,分钟和秒范围为 0 到 60,微秒范围为 0 到 1000000。

一些与时间相关的函数如下

函数 time.fromisoformat(time_string)

此函数用于从 ISO 8601 字符串获取时间。它可以获取 time.isoformat() 函数的任何输出。

函数 time.replace(hour = self.hour, minute = self.minute, second = self.second, microsecond = self.microseconds, tzinfo = self.tzinfo, *fold=0)

此函数用于通过从参数获取值来返回时间。如果没有传递参数,它将返回相同的时间对象值。

函数 time.tzname()

此函数用于返回时区名称。如果 tzinfo 为 None,它将返回 None。

日期时间对象

日期时间对象同时保存日期和时间。作为日期对象,它支持公历;作为时间对象,它每天精确保存 3600*24 秒。

它支持所有与日期和时间相关的函数,一些函数也存在于 datetime 中。例如:

函数 datetime.now(tz=None)

此函数用于获取当前日期和时间。如果 tz 不存在或为 None,则它将返回类似于 today() 函数的日期。

函数 datetime.utcnow()

此函数用于获取当前 UTC 日期和时间相关信息。

还有另外两个函数称为 strftime() 和 strptime()。这些函数适用于日期和时间对象以及日期时间对象。

函数 datetime.strftime(format[, t])

strftime() 函数将表示时间的元组或 struct_time(由 gmtime() 或 localtime() 返回)转换为由 format 参数指定的字符串。如果未提供 t,则使用 localtime() 返回的当前时间。format 必须是字符串。如果 t 中的任何字段超出允许范围,则会引发 ValueError 异常。

函数 datetime.strftime(format[, t])

strptime() 函数根据格式解析表示时间的字符串。返回值是 gmtime() 或 localtime() 返回的 struct_time。format 参数使用与 strftime() 使用的相同的指令;它默认为“%a %b %d %H:%M:%S %Y”,这与 ctime() 返回的格式匹配。

这两个函数使用一些指令。其中一些列出如下:

序号 指令及描述
1

%A

完整星期名称

2

%B

完整月份名称

3

%d

月份中的日期(0 到 31)

4

%S

5

%G

4 位年份,对应于 ISO 周数

6

%m

月份(1 到 12)

7

%M

分钟

8

%T

当前时间,等于 %H:%M:%S

9

%W

当前年份的周数,从第一个星期一的第一个星期开始

10

%w

一周中的日期作为十进制数,星期日=0

11

%Y

包括世纪的年份

12

%Z 或 %z

时区或名称或缩写

示例代码

在线演示

import datetime as dt
my_date1 = dt.datetime(2015, 1, 4) #Storing the date 4th Jan, 2015
print(my_date1)
print('The Weekday of that day was: ' + my_date1.strftime('%A'))
my_date2 = dt.datetime.strptime('August-15-2017', '%B-%d-%Y') #Storing the date 15th Aug, 2017
print(my_date2)
print('The Weekday of that day was: ' + my_date2.strftime('%A'))
print('The difference between two days: ' + str(abs(my_date1 - my_date2)))

输出

2015-01-04 00:00:00
The Weekday of that day was: Sunday
2017-08-15 00:00:00
The Weekday of that day was: Tuesday
The difference between two days: 954 days, 0:00:00

更新于:2019-07-30

7K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告