Python中使用dateutil模組解析時間

2021-09-13 00:15:37 字數 2437 閱讀 8166

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

now_time = datetime.now().isoformat()
輸出為

2018-12-04t08:44:35.792445
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
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 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

817

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中使用

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1 3 nums2 2 則中位數是 2.0 示例 2 nums1 1 2 ...

python中使用bp Python ocbp包

概述ocbpy是乙個python模組,它可以在aacgm座標和磁性之間進行轉換。相對於開闊地調整緯度和當地時間的座標系 閉合場線邊界 ocb 這對統計特別有用 磁極的研究,其中相對於固定磁座標的網格劃分 系統會導致不同物理區域的平均值,例如極光 和極冠測量。此座標繫在 chisham,g.2017 ...

在python中使用websocket

介紹一款很帥的外掛程式autobahnpython,通過它可以在python中很方便的使用websocket進行通訊 基於twisted框架 這個外掛程式真正強大的地方是它提供了乙個 發布 訂閱模式,具體內容有空再寫,先簡單介紹一下如何建立傳統的連線。建立伺服器 必須的模組 from twisted...