如何在 Python 中將字符串轉換為日期時間

已發表: 2022-12-20

從一種類型的數據轉換為另一種類型的數據在任何編程語言中都是至關重要的。 幾乎所有編程語言都支持內置數據類型的類型轉換。

像日期時間這樣的自定義數據類型需要額外的模塊來進行轉換。 我們需要模塊,尤其是對於datetime時間轉換,因為對程序員來說,使用它們從來都不是一件容易的事。 幸運的是,python 有內置的模塊來處理日期時間。

我們將學習如何使用不同的模塊在 Python 中將datetime時間字符串轉換為datetime時間對象。 在開始之前,讓我們看看為什麼我們首先需要轉換它。

為什麼我們需要將日期時間字符串轉換為日期時間對象?

當我們必須處理日期時,如果它們是字符串格式則不容易處理。 將它們轉換為日期時間格式使得使用它們變得非常容易。 字符串中的日期類似於普通字符串。 它不會有任何特殊的方法來處理日期。 它將具有通用的字符串方法,我們在處理日期時不需要這些方法。

假設我們必須比較兩個日期。 如果它們是字符串格式,我們可以正確地比較它們。 如果它們是datetime時間格式,我們可以使用數字之類的比較運算符。

這只是轉換為datetime時間格式使事情變得簡單的一種情況。 在很多情況下,例如添加日期、減去日期、處理時區等,將datetime時間字符串轉換為datetime時間對象使我們的生活比以往任何時候都更加輕鬆。

話雖如此,讓我們看看將datetime時間字符串轉換為datetime時間對象的不同方法。 我們將使用內置的datetime和第三方dateutil模塊將datetime字符串轉換為datetime對象。 讓我們從日期時間模塊開始

使用日期時間

datetime是 Python 的內置模塊,用於處理日期和時間。 這個模塊中有很多類可以幫助我們處理日期和時間。 我們將使用datetime.datetime類進行轉換。

datetime.datetime有很多方法。 我們對strptime方法感興趣,它可以幫助我們進行轉換。 讓我們檢查一下。

日期時間.strptime

datetime.strptime方法用於將datetime時間字符串轉換為datetime時間對象。 它需要兩個字符串,一個是datetime時間字符串,另一個是該datetime時間字符串的格式。 它返回datetime時間對象。

讓我們看一個例子

from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))

如果運行上面的代碼,您將看到以下輸出。

 2022-12-19 21:37:56

我們獲取了一個datetime時間字符串,並使用datetime.strptime方法將其轉換為datetime時間對象。 確保您提供給該方法的格式與datetime時間字符串完全匹配。 如果它們不匹配,那麼您可能會收到錯誤或不正確的輸出。

我們為datetime時間格式使用了一些格式化代碼。 您可以參考文檔中的所有格式代碼。

datetime.strptime方法返回完整的datetime 。 如果要分別獲取日期和時間,我們可以使用datetime對象的日期time方法。 讓我們看看代碼。

 from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())

運行上面的代碼,您將看到以下輸出。

 Date: 2022-12-19 Time: 21:37:56

datetime方法將分別返回它們的對象。 他們將再次擁有各自的日期和時間方法。

我們已經為上面看到的datetime.strptime方法提供了正確的字符串和格式。 如果我們沒有正確提供它們,那麼我們就會出錯。 讓我們看看如何處理這些錯誤。 運行以下代碼。

 from datetime import datetime string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))

上面的代碼將拋出錯誤,因為格式與datetime時間字符串不匹配。 為了處理這些類型的錯誤,我們可以使用 Python 的 try-except。 讓我們添加它。

 from datetime import datetime try: string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting)) except ValueError as error: print(error)

現在,再次運行代碼。 您將在不破壞代碼的情況下看到以下錯誤消息。

 time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

同樣,我們也可以為即將到來的parser.parse方法添加 try-except。 它幫助我們避免在中間破壞代碼。 這與本教程上下文沒有特別相關,但它會提醒您在代碼中使用它。

這就是datetime模塊。 讓我們轉到下一個模塊dateutil

使用日期實用程序

模塊dateutil提供了對datetime模塊的擴展。 通過許多易於使用的方法,它使處理日期和時間變得更加容易。 讓我們使用以下命令安裝模塊。

 pip install python-dateutil

我們感興趣的方法是dateutil.parser.parse 。 讓我們看看如何將datetime時間字符串轉換為datetime時間對象。

解析器.parse

parser.parse方法將採用datetime時間字符串並將其轉換為相應的datetime時間對象格式。 我們不需要為此方法提供任何格式。 它會自動將給定的datetime時間字符串轉換為datetime時間對象。 讓我們看一個例子。

 from dateutil import parser string = "19-12-2022 09:37:56 PM" print(parser.parse(string))

如果運行上面的代碼,您將看到以下輸出。

 2022-12-19 21:37:56

datetime時間字符串必須採用parser.parse方法接受的特定格式。 如果datetime時間字符串格式不符合其所需格式,它將拋出錯誤。 您可以檢查它接受自動轉換的所有日期時間字符串格式。

由於parser.parse方法返回datetime對象,我們可以像在datetime模塊中看到的那樣分別訪問datetime對象。 讓我們看看代碼。

 from dateutil import parser string = "19-12-2022 09:37:56 PM" print("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())

如果你運行上面的代碼,你可以看到下面的輸出。

 Date: 2022-12-19 Time: 21:37:56

正如您所看到的, dateutil使處理日期和時間變得相對容易。 您可以在文檔中探索該模塊。

結論

我們使用了一個內置模塊和一個第三方模塊將datetime時間字符串轉換為 DateTime 對象。 還有另一個名為time的內置模塊,我們可以使用它來將datetime字符串轉換為類似於datetimedateutil模塊的 DateTime 對象。 自己試試吧。 這並不難,因為您已經對其他模塊做過類似的事情。

可能有更多的庫可以用來實現同樣的事情。 我們在 Thing 教程中使用的模塊是標準的並且被廣泛使用。 您可以探索更多關於其他模塊的信息,然後選擇最適合您的模塊。

您還可以探索如何在 python 中計算時差。

快樂編碼