在 Python 中將“未知格式”字串轉換為日期時間物件


日期可以有多種格式,例如:“2009/05/13 19:19:30”、“May 13 2009 07:19PM”和“2009-05-13 19:19”。

Python 提供了許多模組來處理與日期時間相關的資料。要將日期字串的未知格式讀取到 python datetime 物件中,我們可以使用 python dateutil、datetime 模組。

python datetime 物件是一個包含日期和時間物件所有資訊的單個物件。它表示與年份、月份、日期、小時、分鐘、秒以及時區相關的資料。

在本文中,我們將瞭解如何將未知格式的字串轉換為 python datetime 物件。讓我們看看輸入-輸出場景,以瞭解如何在 Python 中將未知格式的字串轉換為 datetime 物件。

輸入輸出場景

假設我們有未知格式的輸入字串。在輸出中,我們可以看到轉換後的 datetime 物件。

Input string (unknown format):
20050607T090650

Output Datetime object:
2005-07-06 09:06:50
Data type: 

使用 datetime.strptime() 方法

我們可以使用 datetime 庫將日期時間字串轉換為 datetime 物件。strptime() 方法根據給定的格式程式碼將字串解析為對應的 datetime 物件。以下是此方法的語法 -

datetime.strptime(data, format_data) 

其中,

  • 資料:date_string。

  • 格式:根據此格式程式碼轉換 date_string。

一些格式程式碼是

  • %a 星期幾的縮寫名稱。

  • %A 星期幾的全稱。

  • %w 星期幾的十進位制數字。

  • %d 帶前導零的月份中的日期。

  • %B 月份的全稱。

  • %b 月份的縮寫名稱。

  • %m 帶前導零的月份。

  • %y 兩位數表示的年份。

  • %Y 帶世紀的年份。

  • %H 小時(24 小時制),以零填充的十進位制數字表示。

  • %M 分鐘,以零填充的十進位制數字表示。

  • %S 秒,以零填充的十進位制數字表示。

  • %z 格式為 ±HHMM[SS[.ffffff]] 的 UTC 偏移量。

  • %Z 時區名稱。

示例

我們將使用 strptime() 方法將字串資料中的日期轉換為datetime物件。

from datetime import datetime
date_string = '20151002151700-0800'
print("Input string (unknown format):")
print(date_string)
obj = datetime.strptime(date_string, "%Y%m%d%H%M%S%z")
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

輸出

Input string (unknown format):
20151002151700-0800
Output Datetime object:
2015-10-02 15:17:00-08:00
Data type: <class 'datetime.datetime'>

在上面的程式碼塊中,我們可以看到從輸入字串轉換後的 datetime 物件。我們已將格式“%Y%m%d%H%M%S%z”指定給 strptime() 方法。

示例

讓我們再舉一個例子,透過指定格式程式碼將日期字串轉換為datetime物件。

from datetime import datetime

date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)

obj = datetime.strptime(date_string, '%a %b %d %H:%M:%S %Y %z')
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

輸出

Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>

這裡“Wed Mar 16 16:12:05 2016 +0800”是字串,obj 是 datetime 物件。

使用 dateutil.parser.parse() 函式

dateutil 模組的 parse() 方法非常靈活,可以解析給定字串資料中的任何內容。parse 函式提供了更多格式來將日期字串解析為 datetime 物件。

示例

在這裡,我們將使用 parse() 方法將未知格式的字串資料讀取到 datetime 物件中。

from dateutil.parser import parse

date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)

obj = parse(date_string)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

輸出

Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>

上面程式碼塊顯示了從未知格式轉換後的 datetime 物件。

示例

請注意,一些 date_string 可能不明確,例如:1995-06-07 可能表示 6 月 7 日或 7 月 6 日。parse 方法具有 dayfirst 和 yearfirst 等引數來處理此類模糊資料。

from dateutil.parser import parse

date_string = '20050607T090650'
print("Input string (unknown format):")
print(date_string)

obj = parse(date_string, dayfirst=True)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

輸出

Input string (unknown format):
20050607T090650
Output Datetime object:
2005-07-06 09:06:50
Data type: <class 'datetime.datetime'>

在此示例中,我們已將布林值 True 指定給 dayfirst 引數,因此在輸出中,datetime 物件表示日期優先(6 月 7 日)。

更新於: 2023 年 5 月 30 日

2K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

立即開始
廣告