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

          sandglass時間處理庫

          聯(lián)合創(chuàng)作 · 2023-09-28 17:39

          概覽

          sandglass(沙漏) 是一個增強(qiáng)的、友好的時間處理庫,目的是為了解放程序員的生產(chǎn)力。 在python中有太多處理時間的庫,datetime/date/time/calendar等等。需要記的細(xì)節(jié)太多,選擇困難。 而sandglass就是解決這個的青霉素。從各種麻煩的轉(zhuǎn)換中解脫出來。 只需記住 Sandglass對象 和 ben() 、 tslice() 、cronwalk() 這幾個主要的api即可。

          Features:

          • api簡潔,開箱即用

          • 增強(qiáng)接管datetime

          • 內(nèi)置時間字符串解析器

          • 方便進(jìn)行各種轉(zhuǎn)換

          • 靈活的構(gòu)造函數(shù)

          • 方便的獲取各種時間信息

          • 支持偽造當(dāng)前時間,方便調(diào)試

          • 一鍵生產(chǎn)時間序列

          • 支持解析crontab表達(dá)式

          用法

          在sandglass中,核心對象是 Sandglass對象 。

          ben() 函數(shù)用來便捷獲取Sandglass對象.:

          不帶參數(shù)默認(rèn)是當(dāng)前時間
          >>>ben()#shortcut of Sandglass.now()
          參數(shù)是時間戳
          >>>ben(timestamp)
          參數(shù)是時間字符串
          >>>ben(timestr)
          參數(shù)是datetime對象
          >>>ben(datetime)
          參數(shù)是Sandglass對象
          >>>ben(Sandglass)
          顯式指明格式
          >>>ben('2013-01-01','%Y-%m-%d')
          datetime-like的構(gòu)造器
          >>>ben(year=2013,month=2,day=8,hour=7)

          也就是說,只要把能表達(dá)時間的東西塞給ben()就行了。 值得一說的是ben(timestr)中通過一個詞法解析的東西,使得timestr可以很靈活。大體規(guī)則是,如果缺少年月日信息,則默認(rèn)用當(dāng)前時間的年月日;如果缺少時分秒信息,則默認(rèn)是0:

          >>>ben('2013,1,1') == ben('2013-01,01') == ben('2013 1 01') == ben('2013-01-01 00:00:00')
          True
          >>>ben('2013,1,1 19:23') == ben('2013-01-01 19:23:00')
          True
          >>>now = datetime.now()
          >>>ben('19:23').year == now.year
          True
          >>>ben('19:23').month == now.month
          True
          >>>ben('19:23').day == now.day
          True
          >>> ben('19:23').hour,ben('19:23').minute,ben('19:23').second
          (19,23,0)

          Sandglass對象 ,通過這個對象,可以方便的獲取各個時間屬性和操作:

          >>>sg = ben('2013,1,1 13:14:15')
          >>>sg>>>sg.year,sg.month,sg.day,sg.hour,sg.minute,sg.second,sg.microsecond
          (2013, 1, 1, 13, 14, 15, 0)
          >>> sg.timestamp#還能直接獲取timestamp
          1357017255.0
          
          #便捷的獲取常用的sql格式
          >>> sg.sql
          '2013-01-01 13:14:15'
          >>> sg.sqldate
          '2013-01-01'
          >>> sg.sqltime
          '13:14:15'
          
          #進(jìn)行增量變換(shift是原地操作,而shifted返回一個新的對象)
          >>> sg.shifted(day=1,minute=-2)>>> sg.hour=23
          >>> sg>>> sg.floor('hour'),sg.ceil('hour')
          (,)
          >>> sg.floor('year'),sg.ceil('year')
          (,)
          >>> sg.round(30*60)>>> sg.roundfloor(30*60)#重載符號
          >>>sg3 = Sandglass(year=2013,month=2,day=27,hour=0)
          >>>sg4 = Sandglass(year=2013,month=3,day=1,hour=0)
          >>> sg3==sg4
          False
          >>> sg3>> sg3>sg4
          False
          >>> sg4-sg3
          datetime.timedelta(2)
          
          #mock當(dāng)前時間,這樣就測試的時候就不用改時間,直接mock給當(dāng)前時間加上個偏移量就行了
          #比如我要把時間往后推一天
          >>> ben()>>> Sandglass.mock(day=1)
          >>> ben()>>> ben()>>> Sandglass.unmock()
          >>> ben()#其它
          >>> sg>>> sg.raw()
          datetime.datetime(2013, 1, 1, 23, 14, 15)
          >>> sg.clone()>>> sg.replace(day=2)
          >>> sg>>> sg.days_in_month
          31
          >>> sg.is_today()
          False
          >>> sg.is_past_date()
          True
          >>> sg.is_future_date()
          False
          >>> sg.strftime('%Y/%m/%d')
          '2013/01/02'
          >>> Sandglass.strptime('20130203','%Y%m%d')

          tslice ,受內(nèi)置函數(shù)xrange啟發(fā),用于獲取一個時間序列。

          格式是:

          tslice(unit,start=None,end=None,step=1,count=None) -> generator of Sandglass object
          unit in ['year', 'month', 'day', 'hour', 'minute', 'second', 'microsecond']

          跟xrange一樣,step可以是負(fù)數(shù)。如果start為空,則默認(rèn)是當(dāng)前時間。

          示例:

          >>>list(tslice('day','2013-01-01','2013-01-04'))
          [,,]
          
          >>>list(tslice('day','2013-01-04','2013-01-01',step=-1))
          [,,]
          
          >>>list(tslice('day','2013-01-04','2013-01-31',step=3,count=2))
          [,]
          
          >>>list(tslice('year',start='2013-01-04',count=2))
          [,]
          
          >>>list(tslice('minute',start='2013-01-04',count=2))
          [,]

          cronwalk ,用于對crontab表達(dá)式進(jìn)行演算,得到下一個執(zhí)行的時間。

          格式:

          cronwalk(expr,base=None)# 如果base為空,默認(rèn)是當(dāng)前時間。

          示例:

          >>>c = iter(cronwalk('0 6 * * *',base='2013-02-03'))
          >>>next(c)>>>next(c)>>>c = iter(cronwalk('0 23-7/2 * * *',base='2013-02-03 08:30:00'))
          >>>next(c)>>>next(c)

          timediff ,用于計算距離下個指定時間還有多久,比如有個活動是每天20:00:00開始的,要計算距離活動開始還有多久:

          >>>timediff('20:00:00',factor=86400,base='19:30:00')
          1800
          >>>timediff('20:00:00',factor=86400,base='21:30:00')
          81000
          瀏覽 26
          點(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>
                  天天操天天撸视频免费 | 色婷婷成人网站 | 国产精品高潮呻吟 | 亚洲中文字幕2022 | 国产免费网址 |