<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>

          再見Datetime! 這個Python日期庫太神了!

          共 8314字,需瀏覽 17分鐘

           ·

          2022-07-23 12:48


          大家好,我是菜鳥哥!


          關(guān)于日期處理,Python 提供了很多的庫,比如標(biāo)準(zhǔn)庫 datetime、第三方庫 dateutil、arrow 等等。這里介紹一個我個人最喜歡的庫 pendulum,用起來可以說非常的方便,任何對日期的操作它都能滿足。


          在使用之前需要先安裝,直接 pip install pendulum 即可。


          下面來看一下用法,首先是 datetime, date, time 的創(chuàng)建。

          import pendulum

          dt = pendulum.datetime(
              2022328201030)
          print(dt.__class__)
          print(dt)
          """
          <class 'pendulum.datetime.DateTime'>
          2022-03-28T20:10:30+00:00
          """

          # 創(chuàng)建的對象是 DateTime 類型
          # 并且?guī)в袝r區(qū),默認(rèn)是 UTC
          # 我們可以換一個時區(qū)
          dt = pendulum.datetime(
              2022328201030, tz="Asia/Shanghai")
          print(dt)
          """
          2022-03-28T20:10:30+08:00
          """


          # 如果不想要時區(qū),那么指定 tz=None
          dt = pendulum.datetime(
              2022328201030, tz=None)
          print(dt)
          """
          2022-03-28T20:10:30
          """


          # 然后是 date 的創(chuàng)建
          d = pendulum.date(2022328)
          print(d.__class__)
          print(d)
          """
          <class 'pendulum.date.Date'>
          2022-03-28
          """


          # time 的創(chuàng)建
          t = pendulum.time(201030)
          print(t.__class__)
          print(t)
          """
          <class 'pendulum.time.Time'>
          20:10:30
          """

          如果創(chuàng)建 datetime 時,時區(qū)默認(rèn)是 UTC。如果不想要時區(qū),或者希望時區(qū)是本地時區(qū),那么 pendulum 還專門提供了兩個方法。

          import pendulum

          # 創(chuàng)建 datetime 時設(shè)置為本地時區(qū)
          # 還是調(diào)用了 pendulum.datetime 函數(shù)
          # 但是 tz 被設(shè)置成了 pendulum.local_timezone()
          dt = pendulum.local(
              2022328201030)
          print(dt)
          """
          2022-03-28T20:10:30+08:00
          """

          print(pendulum.local_timezone())
          """
          Timezone('Asia/Shanghai')
          """


          # 創(chuàng)建 datetime 時不設(shè)置時區(qū)
          # 內(nèi)部也是調(diào)用了 pendulum.datetime 函數(shù)
          # 但是 tz 為 None
          dt = pendulum.naive(2022328201030)
          print(dt)
          """
          2022-03-28T20:10:30
          """

          然后 pendulum 還提供了幾個方法,比如創(chuàng)建當(dāng)前的 datetime,date 等等。

          import pendulum

          # 創(chuàng)建當(dāng)前的 datetime
          # 默認(rèn)是本地時區(qū),但時區(qū)可以指定
          dt = pendulum.now()
          print(dt)
          """
          2022-05-29T20:40:49.632182+08:00
          """


          # 創(chuàng)建當(dāng)前的 date,但返回的仍是 datetime
          # 只不過時分秒均為 0,同樣可以指定時區(qū)
          dt = pendulum.today()
          print(dt)
          """
          2022-05-29T00:00:00+08:00
          """


          # 獲取明天對應(yīng)的 date
          # 返回的是 datetime,時分秒為 0
          # 時區(qū)可以指定,默認(rèn)是本地時區(qū)
          dt = pendulum.tomorrow()
          print(dt)
          """
          2022-05-30T00:00:00+08:00
          """


          # 獲取昨天對應(yīng)的 date
          dt = pendulum.yesterday()
          print(dt)
          """
          2022-05-28T00:00:00+08:00
          """

          我們還可以根據(jù)時間戳或者字符串來創(chuàng)建:

          import pendulum

          # 根據(jù)時間戳創(chuàng)建
          dt1 = pendulum.from_timestamp(1653828466)
          dt2 = pendulum.from_timestamp(1653828466,
                                        tz=pendulum.local_timezone())
          print(dt1)
          print(dt2)
          """
          2022-05-29T12:47:46+00:00
          2022-05-29T20:47:46+08:00
          """


          # 根據(jù)字符串創(chuàng)建
          dt1 = pendulum.parse("2020-05-03 12:11:33")
          dt2 = pendulum.parse("2020-05-03 12:11:33",
                               tz=pendulum.local_timezone())
          print(dt1)
          print(dt2)
          """
          2020-05-03T12:11:33+00:00
          2020-05-03T12:11:33+08:00
          """

          datetime、date、time 的創(chuàng)建我們說完了,然后再來看看它們支持的操作,這也是最核心的部分。


          datetime 相關(guān)操作


          操作非常多,我們逐一介紹。

          import pendulum

          dt = pendulum.local(
              2022328201030)

          # 獲取 date 部分和 time 部分
          print(dt.date())
          print(dt.time())
          """
          2022-03-28
          20:10:30
          """


          # 替換掉 dt 的某部分,返回新的 datetime
          # 年月日時分秒、以及時區(qū)都可以替換
          print(dt.replace(year=9999))
          """
          9999-03-28T20:10:30+08:00
          """


          # 轉(zhuǎn)成時間戳
          print(dt.timestamp())
          """
          1648469430.0
          """


          # 返回年、月、日、時、分、秒、時區(qū)
          print(dt.year, dt.month, dt.day)
          print(dt.hour, dt.minute, dt.second)
          print(dt.tz)
          """
          2022 3 28
          20 10 30
          Timezone('Asia/Shanghai')
          """

          然后是生成字符串,pendulum.DateTime 對象可以轉(zhuǎn)成各種格式的日期字符串。

          import pendulum

          dt = pendulum.local(
              2022328201030)

          # 下面四個最為常用
          print("datetime:", dt.to_datetime_string())
          print("date:", dt.to_date_string())
          print("time:", dt.to_time_string())
          print("iso8601:", dt.to_iso8601_string())
          """
          datetime: 2022-03-28 20:10:30
          date: 2022-03-28
          time: 20:10:30
          iso8601: 2022-03-28T20:10:30+08:00
          """

          # 當(dāng)然還支持很多其它格式,不過用的不多
          # 隨便挑幾個吧
          print("atom:", dt.to_atom_string())
          print("rss:", dt.to_rss_string())
          print("w3c:", dt.to_w3c_string())
          print("cookie:", dt.to_cookie_string())
          print("rfc822:", dt.to_rfc822_string())
          """
          atom: 2022-03-28T20:10:30+08:00
          rss: Mon, 28 Mar 2022 20:10:30 +0800
          w3c: 2022-03-28T20:10:30+08:00
          rfc822: Mon, 28 Mar 22 20:10:30 +0800
          """

          我們有時也需要判斷當(dāng)前日期是星期幾、在當(dāng)前這一年是第幾天等等,pendulum 也已經(jīng)幫我們封裝好了。

          import pendulum

          dt = pendulum.local(
              2022328201030)

          # 返回星期幾
          # 注意:星期一到星期天分別對應(yīng) 1 到 7
          print(dt.isoweekday())  # 1

          # 返回一年當(dāng)中的第幾天
          # 范圍是 1 到 366
          print(dt.day_of_year)  # 87

          # 返回一個月當(dāng)中的第幾天
          print(dt.days_in_month)  # 31

          # 返回一個月當(dāng)中的第幾周
          print(dt.week_of_month)  # 5

          # 返回一年當(dāng)中的第幾周
          print(dt.week_of_year)  # 13

          # 是否是閏年
          print(dt.is_leap_year())  # False

          最后就是日期的運(yùn)算,這是 pendulum 最為強(qiáng)大的地方,至于為什么強(qiáng)大,我們演示一下就知道了。

          import pendulum

          dt = pendulum.local(
              2022330201030)

          # 返回下一個月的今天
          print(dt.add(months=1))
          """
          2022-04-30T20:10:30+08:00
          """


          # 返回上一個月的今天
          # 但是上一個月是 2 月,并且是平年
          # 所以最多 28 天
          print(dt.add(months=-1))
          """
          2022-02-28T20:10:30+08:00
          """

          # 我們看到處理的非常完美
          # 該方法的原型如下,年月日時分秒都是支持的,當(dāng)然還有星期也支持
          """
          def add(
              self,
              years=0,
              months=0,
              weeks=0,
              days=0,
              hours=0,
              minutes=0,
              seconds=0,
              microseconds=0,
          ):
          """

          像 Python 的內(nèi)置模塊 datetime 在將日期相加的時候,最多支持到天,我們無法計算下一周、下一個月、下一年的日期。而 pendulum 則可以很方便地處理,這也是我最喜歡的一點(diǎn)。


          當(dāng)然啦,add 里面的值為正,相當(dāng)于日期往后退;值為負(fù),相當(dāng)于日期往前推。


          然后是兩個日期還可以做減法:

          import pendulum

          dt1 = pendulum.local(
              2021120112233)

          dt2 = pendulum.local(
              2022330201030)

          period = dt2 - dt1
          # 返回的是 Period 對象
          # 相當(dāng)于 datetime 模塊里面的 timedelta
          print(period.__class__)
          """
          <class 'pendulum.period.Period'>
          """


          # 但是功能方面,Period 要強(qiáng)大很多
          # 兩者差了多少年
          print(period.in_years())  # 1
          # 兩者差了多少個月
          print(period.in_months())  # 14
          # 兩者差了多少個星期
          print(period.in_weeks())  # 62
          # 兩者差了多少天
          print(period.in_days())  # 434
          # 兩者差了多少個小時
          print(period.in_hours())  # 10424
          # 兩者差了多少分鐘
          print(period.in_minutes())  # 625487
          # 兩者差了多少秒
          print(period.in_seconds())  # 37529277

          功能非常強(qiáng)大,Python 的 datetime 模塊里面的 timedelta 最多只能計算兩個日期差了多少天,而這里年月日時分秒均可。


          以上就是本文的內(nèi)容,當(dāng)然 pendulum 的功能其實(shí)不止我們上面說的那些,有興趣的話可以參考官網(wǎng),但常用的差不多就這些東西。




          推薦閱讀:

          入門: 最全的零基礎(chǔ)學(xué)Python的問題  | 零基礎(chǔ)學(xué)了8個月的Python  | 實(shí)戰(zhàn)項目 |學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


          AI: 會做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水印! | 一鍵把html網(wǎng)頁保存為pdf!|  再見PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r機(jī)票提示器! |60行代碼做了一個語音壁紙切換器天天看小姐姐!


          年度爆款文案

          點(diǎn)閱讀原文,看30個Python視頻案例!

          瀏覽 38
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  色天天综合网 | 操p在线免费观看 | 天堂免费av | 一本久道无码 | 操多水美女在线视频 |