最近經常需要用Python計算時間日期,如:計算兩個日期間的日期列表,函數如下:
```
from datetime import datetime,timedelta
def get_date_among_two_date(start_date,end_date):
a_day = timedelta(days=1)
res = []
while start_date <= end_date:
res.append(start_date)
start_date += a_day
return res
```
后來了解到了`dateutil`庫,發現用`dateutil`庫實現更為簡單,實現如下:
```
from dateutil.rrule import *
def get_date_among_two_date(start_date,end_date):
return list(rrule(DAILY,dtstart=start_date,until=end_date))
```
---
### `dateutil`用法
#### `relativedelta`(時間偏移)
例:
```
from datetime import datetime;
from dateutil.relativedelta import relativedelta
#計算指定日期與現在的差值
now_date = datetime.now()
relativedelta(datetime(2003, 10, 24, 10, 0), now_date)
'''
結果:relativedelta(years=-14, months=-1, days=-15, hours=-5, minutes=-33, seconds=-38, microseconds=+866005)
'''
#計算下個月的今天
datetime.today()+relativelta(months=+1)
```
---
#### `parser`(根據字符串解析成datetime)
例:
```
from dateutil import parser
parser.parse("2003-09-25T10:49:41")
parser.parse("20030925T104941")
#fuzzy開啟模糊匹配,過濾掉無法識別的時間日期字符
parse("this is 12:00:00",fuzzy=True)
'''
fuzzy_with_tokens開啟模糊匹配,返回一個元組
其中第一個元素是已解析的datetime
第二個元素是一個包含被忽略的字符串的部分的元組
'''
parse('this is 12:00:00',fuzzy_with_tokens =True)
```
---
#### `rrule`(根據定義的規則來生成datetime)
>class dateutil.rrule.rrule(freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, bymonth=None, bymonthday=None, byyearday=None, byeaster=None, byweekno=None, byweekday=None, byhour=None, byminute=None, bysecond=None, cache=False)
freq --- 時間單位。可以是 YEARLY, MONTHLY, WEEKLY, DAILY,HOURLY, MINUTELY, SECONDLY。即年月日周時分秒。
dtstart --- 開始時間
until --- 結束時間
wkst --- 周開始時間。
interval --- 間隔。
count --- 指定生成多少個。
by*** --- 指定匹配的周期。比如byweekday=(MO,TU)則只有周一周二的匹配。byweekday可以指定MO,TU,WE,TH,FR,SA,SU。即周一到周日。
例:
```
from dateutil.rrule import *
#計算兩日期之間的日期,間隔為3
list(rrule(DAILY,interval=3,dtstart=parse('2017-12-01'),until=parse('2017-12-24')))
#計算兩日期之間的日期,返回前三個
list(rrule(DAILY,count=3,dtstart=parse('2017-12-01')))
#計算兩日期之間的周六周天的日期
list(rrule(DAILY,byweekday=(SA,SU),dtstart=parse('2017-12-01'),until=parse('2018-02-24')))
#按月為單位
list(rrule(MONTHLY,dtstart=parse('2017-05-19'),until=parse('2017-12-20')))
```
---
#### [`dateutil`文檔地址](http://dateutil.readthedocs.io/)
- 前端
- js學習
- 瀏覽器默認樣式
- webpack+vue
- 個人常用webpack打包依賴
- vue使用學習
- vue源碼學習
- webpack5配置babel
- 瀑布流布局
- 個人常用庫
- 其他
- centos搭建ss服務器
- ios配置Universal Links
- pdf2htmlEX使用
- python
- python操作redis
- linux部署Django
- dateutil庫(datetime模塊的擴展).md
- docker部署django
- mysql
- 基礎知識
- 常用函數
- join關聯查詢技巧
- linux
- shell備份mysql數據庫
- crontab定時任務
- centos7安裝部署gitlab服務器
- nginx安裝配置
- 收藏夾
- python
- 博客
- 工具
- 其他
- 前端