<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          6 款 超好用的 Python 時(shí)間庫(kù)

          共 3077字,需瀏覽 7分鐘

           ·

          2020-08-15 15:07












          點(diǎn)擊上方數(shù)據(jù)管道”,選擇“置頂星標(biāo)”公眾號(hào)

          干貨福利,第一時(shí)間送達(dá)

          開(kāi)源最前線(ID:OpenSourceTop)
          鏈接:https://opensource.com/article/18/4/python-datetime-libraries
          寫過(guò)Python程序的人都知道,Python日期和時(shí)間的處理非常繁瑣和麻煩。

          除了將字符串轉(zhuǎn)換為更有用的 Python 對(duì)象之外,還有許多庫(kù)具有一些有用的方法和工具,可以讓你更輕松地進(jìn)行時(shí)間測(cè)試、將時(shí)間轉(zhuǎn)換為不同的時(shí)區(qū)、以人類可讀的格式輸出時(shí)間信息,本文將介紹以下六個(gè)Python的時(shí)間日期庫(kù):
          Dateutil
          Arrow
          Moment
          Maya
          Delorean
          Freezegun


          內(nèi)建的 datetime 模塊

          在介紹其他庫(kù)之前,讓我們回顧以下如何使用datetime模塊將日期字符串轉(zhuǎn)換為Python日期時(shí)間對(duì)象。

          假設(shè)我們從API接收到這個(gè)日期字符串,并且需要它作為Python datetime對(duì)象存在:
          2018-04-29T17:45:25Z

          該字符串包括:
          YYYY-MM-DD格式的日期
          字母“T”表示即將到來(lái)的時(shí)間
          HH:II:SS的時(shí)間格式
          指示此時(shí)間的時(shí)區(qū)指示符“Z”采用UTC

          要使用該datetime模塊將此字符串轉(zhuǎn)換為Python datetime對(duì)象,你可以首先從strptime開(kāi)始。datetime.strptime接收日期字符串和格式化字符并返回一個(gè)Python datetime對(duì)象。

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

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

          此轉(zhuǎn)換的代碼如下所示:


          格式化字符串很難閱讀和理解。有些人不太了解閱讀datetime代碼的人就會(huì)發(fā)現(xiàn)這很難理解,盡管其含義已有文檔說(shuō)明,但仍然很難閱讀。

          讓我們看看其他庫(kù)如何處理這種轉(zhuǎn)換。


          1、Dateutil

          Dateutil模塊為datetime模塊提供了一些擴(kuò)展,依然以上面的示例為例,實(shí)現(xiàn)相同的結(jié)果則要簡(jiǎn)單得多:


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


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


          dateutil還提供了relativedelta,用于計(jì)算兩個(gè)日期時(shí)間之間的時(shí)差或從日期時(shí)間添加/刪除,rrule用于創(chuàng)建重復(fù)日期時(shí)間,tz用于處理時(shí)區(qū)以及其他工具。


          2、Arrow

          Arrow是另一個(gè)庫(kù),其目標(biāo)是進(jìn)行操作,格式化,并處理更合理的日期和時(shí)間。它包括dateutil模塊,根據(jù)其文檔描述Arrow旨在“幫助你使用更少的代碼來(lái)處理日期和時(shí)間”。

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


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


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


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


          3、Moment

          Moment的創(chuàng)作者認(rèn)為它是“測(cè)試版”,但即使它處于早期階段,卻非常受歡迎的,因此它出現(xiàn)在推薦名單內(nèi)

          Moment將字符串轉(zhuǎn)換的方法很簡(jiǎn)單,類似于我們之前提到的庫(kù):


          和其他庫(kù)一樣,它最初返回它自己的datetime類的實(shí)例。要返回Python datetime對(duì)象,請(qǐng)?zhí)砑右粋€(gè)date()調(diào)用。

          這會(huì)將Moment datetime類轉(zhuǎn)換為Python日期時(shí)間對(duì)象。Moment還提供了使用人類可讀語(yǔ)言創(chuàng)建新日期的方法。如為明天創(chuàng)建一個(gè)日期:


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



          4、Maya

          MAya包含了其他流行的庫(kù),諸如Humanize,pytz和pendulum等等。該項(xiàng)目的目標(biāo)是讓人們更容易處理日期。

          Maya的README包含幾個(gè)有用的示例。以下是如何使用Maya重現(xiàn)上面解析示例:


          請(qǐng)注意,我們必須在.datetime()之后調(diào)用maya.parse()。如果我們跳過(guò)這一步,Maya將返回MayaDT類的一個(gè)實(shí)例:

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


          很顯然,slang_time()的輸出結(jié)果會(huì)根據(jù)你與datetime對(duì)象的距離長(zhǎng)短而改變。


          5、Delorean

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

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


          現(xiàn)在,在日期時(shí)間對(duì)象d_t可供您使用的情況下,你可以使用Delorean進(jìn)行操作,例如將日期時(shí)間轉(zhuǎn)換為美國(guó)東部時(shí)區(qū):


          你看小時(shí)數(shù)已經(jīng)從17變?yōu)?3了,你還可以使用自然語(yǔ)言方法來(lái)操作 datetime 對(duì)象。2018年4月29日之后的下個(gè)星期五(我們使用的日期):



          6、Freezegun

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


          要跨時(shí)區(qū)進(jìn)行測(cè)試,可以將tz_offset參數(shù)傳遞給裝飾器。該freeze_time裝飾同樣能夠處理更通俗易懂的語(yǔ)言日期,例如@freeze_time( April 4, 2017 )。

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

          這些庫(kù)各自都具備一些功能,但并不都是完美的。有些擅長(zhǎng)時(shí)間操作,有些擅長(zhǎng)解析。但他們都有共同的目標(biāo),即讓時(shí)間日期相關(guān)的操作都變得簡(jiǎn)單。當(dāng)你發(fā)現(xiàn)Python的內(nèi)置datetime模塊已經(jīng)不夠用的時(shí)候,你可以選擇以上的某一個(gè)庫(kù)嘗試看看。

          瀏覽 61
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色播日本视频在线观看 | 在线观看亚洲网站 | 日批免费视频观看 | 欧美成人精品在线播放 | 国产内射小视频 |