更多課程 選擇中心

Python培訓
美國上市教育機構

400-111-8989

Python培訓

python知識分享|最好用的六款python日期時間庫

  • 發布:猿妹
  • 來源:開源最前線
  • 時間:2018-09-05 15:51

寫過python程序的人都知道,python日期和時間的處理非常繁瑣和麻煩,為了解決大家這一難題,我整理了平常用的比較好的六款python日期時間庫分享給大家!

除了將字符串轉換為更有用的 python 對象之外,還有許多庫具有一些有用的方法和工具,可以讓你更輕松地進行時間測試、將時間轉換為不同的時區、以人類可讀的格式輸出時間信息,本文將介紹以下六個Python的時間日期庫:

● Dateutil

● Arrow

● Moment

● Maya

● Delorean

● Freezegun

內建的 datetime 模塊

在介紹其他庫之前,讓我們回顧以下如何使用datetime模塊將日期字符串轉換為Python日期時間對象。

假設我們從API接收到這個日期字符串,并且需要它作為Python datetime對象存在:

2018-04-29T17:45:25Z

該字符串包括:

● YYYY-MM-DD格式的日期

● 字母“T”表示即將到來的時間

● HH:II:SS的時間格式

● 指示此時間的時區指示符“Z”采用UTC

要使用該datetime模塊將此字符串轉換為Python datetime對象,你可以首先從strptime開始。datetime.strptime接收日期字符串和格式化字符并返回一個Python datetime對象。

我們必須手動將日期時間字符串的每個部分轉換為Python datetime.strptime可以理解的格式化字符串。四位數的年份表示為%Y。兩位數的月份是%m。兩位數的日期是%d。24小時制的時間,%H表示小時數,分鐘數用%M表示,秒用%S表示。

由于字符串中的“Z”表示此日期時間字符串采用UTC,所以我們可以在格式中忽略此項。

此轉換的代碼如下所示:

轉換的代碼

格式化字符串很難閱讀和理解。有些人不太了解閱讀datetime代碼的人就會發現這很難理解,盡管其含義已有文檔說明,但仍然很難閱讀。

讓我們看看其他庫如何處理這種轉換。

1、Dateutil

Dateutil模塊為datetime模塊提供了一些擴展,依然以上面的示例為例,實現相同的結果則要簡單得多:

Dateutil

dateutil解析后可以自動返回字符串的時區。由于我們采用UTC,你可以看到返回了datetime對象。如果你想parse完全忽略時區信息,并返回一個原生的DateTime對象,你可以傳遞參數 ignoretz=True 給parse,像這樣:

Dateutil

Dateutil還可以解析更多可讀的日期字符串:

Dateutil解析日期字符串

dateutil還提供了relativedelta,用于計算兩個日期時間之間的時差或從日期時間添加/刪除,rrule用于創建重復日期時間,tz用于處理時區以及其他工具。

2、Arrow

Arrow是另一個庫,其目標是進行操作,格式化,并處理更合理的日期和時間。它包括dateutil模塊,根據其文檔描述Arrow旨在“幫助你使用更少的代碼來處理日期和時間”。

要返回我們的解析示例,下面介紹如何使用 Arrow 將日期字符串轉換為 Arrow 的 datetime 類的實例:

Arrow

你也可以在第二個參數中指定get() 格式,就像使用strptime一樣,Arrow會盡力解析你提供的字符串,get() 返回 Arrow 的 datetime 類的一個實例。要使用Arrow來獲取 Python datetime對象,可以如下所示:

Arrow

通過Arrow datetime類的實例,你還可以訪問Arrow的其他有用方法。例如,它的humanize()方法將日期時間解析成可讀的短語,如下所示:

Arrow

你可以在Arrow文檔中閱讀更多有用的方法

3、Moment

Moment的創作者認為它是“測試版”,但即使它處于早期階段,卻非常受歡迎的,因此它出現在推薦名單內

Moment將字符串轉換的方法很簡單,類似于我們之前提到的庫:

Moment

和其他庫一樣,它最初返回它自己的datetime類的實例。要返回Python datetime對象,請添加一個date()調用。

這會將Moment datetime類轉換為Python日期時間對象。Moment還提供了使用人類可讀語言創建新日期的方法。如為明天創建一個日期:

Moment

它add()和subtract()命令采取關鍵字參數,使日期的操作變得簡單,以及為了獲得后天的日期,Moment會使用下面的代碼:

Moment

4、Maya

MAya包含了其他流行的庫,諸如Humanize,pytz和pendulum等等。該項目的目標是讓人們更容易處理日期。

Maya的README包含幾個有用的示例。以下是如何使用Maya重現上面解析示例:

Maya

請注意,我們必須在.datetime()之后調用maya.parse()。如果我們跳過這一步,Maya將返回MayaDT類的一個實例:<MayaDT epoch=1525023925.0>。

由于Maya有許多方法和datetime庫中的一樣,因此它可以使用其MayaDT類的實例來執行諸如使用slang_time()方法將timedeltas轉換為純文本語言,以及將日期時間間隔保存在單個類的實例操作中。以下是如何使用Maya將日期時間表示為人類可讀的短語:

Maya

很顯然,slang_time()的輸出結果會根據你與datetime對象的距離長短而改變。

5、Delorean

Delorean以《Back to the Future》電影中的時間旅行汽車命名的,適用于操縱日期時間:將日期時間轉換為其他時區,并添加或減去時間。

Delorean需要有效的Python Datetime才能執行,所以如果你需要使用日期時間字符串,最好將其與上述庫中的一個配合使用。例如,將Maya與Delorean一起使用:

Maya

現在,在日期時間對象d_t可供您使用的情況下,你可以使用Delorean進行操作,例如將日期時間轉換為美國東部時區:

Maya

你看小時數已經從17變為13了,你還可以使用自然語言方法來操作 datetime 對象。2018年4月29日之后的下個星期五(我們使用的日期):

Maya

6、Freezegun

Freezegun是一個可以幫助你在Python代碼中測試特定日期的庫。使用@freeze_time裝飾器,你可以設置測試條件下的具體日期和時間,所有datetime.datetime.now(),datetime.datetime.utcnow()等都會返回你指定的日期和時間。例如:

Freezegun

要跨時區進行測試,可以將tz_offset參數傳遞給裝飾器。該freeze_time裝飾同樣能夠處理更通俗易懂的語言日期,例如@freeze_time('April 4, 2017')。

上面提到的每個庫都有各自不同的功能。可能很難確定哪一個最適合你的需求。正如Maya的創作者 Kenneth Reitz說:“所有這些項目相互補充,它們都很友好。”

這些庫各自都具備一些功能,但并不都是完美的。有些擅長時間操作,有些擅長解析。但他們都有共同的目標,即讓時間日期相關的操作都變得簡單。當你發現Python的內置datetime模塊已經不夠用的時候,你可以選擇以上的某一個庫嘗試看看。

感謝您的閱讀,這六款python時間日期庫您可以根據實際情況進行選擇,希望對你有所幫助。更多python相關資訊,歡迎關注達內python培訓

免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

上一篇:python已經加入到全國計算機等級二級考試了,你知道嗎?
下一篇:python就業前景怎么樣?初學者怎樣才能快速學好python?

交錢了,學了3天Python編程,我想放棄了......

學習Python編程這么久了,你是青銅還是王者?

Star 數達到 26000+,這是什么Python算法?

這個Python調試工具,你需要嗎?

選擇城市和中心
黑龍江省

吉林省

河北省

湖南省

貴州省

云南省

廣西省

海南省

4438全国大成网人网站