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+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.