Python日期時間處理庫dateutil

簡介

dateutil爲Python標準庫datetime提供了強大的擴展

功能:

  • 相對時間。如下週一、下個月、明年
  • 兩個日期間的差。
  • 靈活日期解析。使用iCalendar規範的超集,支持RFC字符串解析
  • 幾乎所有字符串格式的日期解析。
  • 實現各種各樣格式文件
  • 最新世界時區信息
  • 計算任何給定年份的復活節星期日日期
  • 全面的測試套件




安裝

pip install python-dateutil




初試

from dateutil.rrule import *
from dateutil.parser import *
from dateutil.easter import *
from dateutil.relativedelta import *

now = parse("May 20 13:14:00 UTC 2020")  # UTC爲世界統一時間
today = now.date()  # 轉換爲日期
year = rrule(YEARLY, dtstart=now, bymonth=8, bymonthday=13, byweekday=FR)[0].year
rdelta = relativedelta(easter(year), today)
print("今天是: {}".format(today))
print("下一個8.13爲週五在 {} 年".format(year))
print("那一年的復活節離現在有多遠: {}".format(rdelta))
print("那一年的復活節日期: {}".format(today + rdelta))
# 今天是: 2020-05-20
# 下一個8.13爲週五在 2021 年
# 那一年的復活節離現在有多遠: relativedelta(months=+10, days=+15)
# 那一年的復活節日期: 2021-04-04




相對時間

使用dateutil.relativedelta類初始化設置的參數,並進行+操作

相對時間:years, months, days等,帶s結尾

絕對時間:year, month, day等

import calendar
from datetime import *
from dateutil.relativedelta import *

NOW = datetime.now()
TODAY = date.today()
print('現在時間', NOW)
print('今天日期', TODAY)

print('下個月', NOW + relativedelta(months=+1))  # 注意參數有s
print('下個月再加一週', NOW + relativedelta(months=+1, weeks=+1))
print('下個月再加一週的早上10點', TODAY + relativedelta(months=+1, weeks=+1, hour=10))  # 注意用的是日期,且hour沒s

print('一年前一個月', NOW + relativedelta(years=+1, months=-1))

print('下週五', TODAY + relativedelta(weekday=FR))
print('下週五', TODAY + relativedelta(weekday=calendar.FRIDAY))
print('下週三', TODAY + relativedelta(weekday=WE(+1)))  # 如果今天爲週三則返回今天
print('下週三', TODAY + relativedelta(days=+1, weekday=WE(+1)))  # 即使今天週三也返回下週三

print('這個月最後的週五', TODAY + relativedelta(day=31, weekday=FR(-1)))

print('距離下個世紀還有', relativedelta(datetime(2100, 1, 1), TODAY))  # 作差

print('2020年母親節', datetime(2020, 5, 1) + relativedelta(weekday=SU(+2)))  # 公曆5月第2個週日是母親節
print('XerCis幾歲了', relativedelta(NOW, datetime(1997, 6, 19, 12, 0)))

print('今年第260天的日期', date(2020, 1, 1) + relativedelta(yearday=260))

處理不同天數的月份永遠不會跨越月的邊界,年同理

from datetime import *
from dateutil.relativedelta import *

# 處理不同天數的月份永遠不會跨越月的邊界
print(date(2003, 1, 27) + relativedelta(months=+1))  # 2003-02-27
print(date(2003, 1, 31) + relativedelta(months=+1))  # 2003-02-28
print(date(2003, 1, 31) + relativedelta(months=+2))  # 2003-03-31

# 年同理
print(date(2000, 2, 28) + relativedelta(years=+1))  # 2001-02-28
print(date(2000, 2, 29) + relativedelta(years=+1))  # 2001-02-28




未完待續




參考文獻

  1. dateutil - documentation
  2. datetime - documentation
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章