Python中dateutil模組的理解(附範例)

不言
發布: 2018-12-04 17:31:12
轉載
6209 人瀏覽過

本篇文章帶給大家的內容是關於Python中dateutil模組的理解(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

最近剛接觸專案組內的python項目,發現所有的時間格式都是用的iso8601,同事美其名曰說是為了項目的國際化(其實用戶量最多幾百人吧,還都集中在公司內部,哪來的國際化,哈哈哈哈!)。所以決定對該時間格式深入研究下,發現了python中的dateutil模組。

DATETIME轉ISO8601格式,直接用isoformat()方法轉即可

now_time = datetime.now().isoformat()
登入後複製

輸出為

2018-12-04T08:44:35.792445
登入後複製
  • 從字串解析DATETIME格式(不用dateutil模組)

now_date_str = datetime.now().isoformat().split('.')[0]
my_format = '%Y-%m-%dT%H:%M:%S'
print(datetime.strptime(now_date_str, my_format))
登入後複製

這是python中最常用的將字串轉成時間格式的方法,輸出結果為

2018-12-04 08:44:35
登入後複製
  • #使用dateutil解析字串

from dateutil.parser import parse
timestamp = parse(now_date_str, fuzzy=True)
print(timestamp)
登入後複製

輸出結果同上,但這個parse方法中的fuzzy很神奇,可以模糊匹配時間格式,感興趣的可以看下原始碼哈!

  • 計算時間差

today = date.today()
my_birthday = date(year=1992, month=3, day=17)
print('我已经出生' + str((today - my_birthday).days) + '天')
登入後複製

可以直接計算我自己出生多少天了,輸出為

我已经出生9758天
登入後複製

但是如果我要計算我多大了,也就是出生多少年,會出現什麼狀況呢?

Traceback (most recent call last):
2018-12-04 08:57:08
  File "F:/pythonProject/testcode/testDate.py", line 27, in <module>
    print((today-my_birthday).years)
2018-12-04 08:57:08
AttributeError: 'datetime.timedelta' object has no attribute 'years'
登入後複製

很遺憾,報錯了,因為timedelta中沒有獲取年份和月份的方法,所以我們繼續使用dateutil模組

from dateutil.relativedelta import relativedelta
diff = relativedelta(today, my_birthday)
登入後複製

透過輸出可以發現,我們能獲取到兩個日期中間相差幾年,幾個月和幾天

relativedelta(years=+26, months=+8, days=+17)
登入後複製
print(diff.years)
print(diff.months)
print(diff.days)
登入後複製
26
8
17
登入後複製
  • 獲取日期列表,如果需要獲取連續五週週二的日期,通過dateutil可以很容易實現

from dateutil.rrule import rrule, WEEKLY
pp(list(rrule(WEEKLY, count=10, dtstart=next_tuesday)))
登入後複製

輸出為

[datetime.datetime(2018, 12, 4, 8, 59, 6),
 datetime.datetime(2018, 12, 11, 8, 59, 6),
 datetime.datetime(2018, 12, 18, 8, 59, 6),
 datetime.datetime(2018, 12, 25, 8, 59, 6),
 datetime.datetime(2019, 1, 1, 8, 59, 6),
 datetime.datetime(2019, 1, 8, 8, 59, 6),
 datetime.datetime(2019, 1, 15, 8, 59, 6),
 datetime.datetime(2019, 1, 22, 8, 59, 6),
 datetime.datetime(2019, 1, 29, 8, 59, 6),
 datetime.datetime(2019, 2, 5, 8, 59, 6)]
登入後複製

注意:dtstart必須是時間格式

以上是Python中dateutil模組的理解(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!