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