1. 程式人生 > >sandglass(沙漏)——一個讓人解脫的python時間處理庫

sandglass(沙漏)——一個讓人解脫的python時間處理庫

blank git over google nco trac 通過 對象 pytho

在遊戲開發的過程中頻繁的須要跟時間相關的做處理。而python內置了好多個時間處理庫,datetime/date/time/calendar/timedelta等,細節繁多略具迷惑性。非常多東西不夠便捷直接。
想一下以下這些場景:
  • 2014年六一兒童節那天的時間戳是多少?
  • 2014年六一兒童節那天是星期幾?
  • datetime對象轉成字符串後面往往帶小數點,即微秒。而我存到數據庫是不須要微秒的,怎麽搞?
  • 從配置中讀取、網絡中傳輸、數據庫存儲獲取到的時間信息是字符串的,怎麽轉成能夠用於運算的對象?
  • 要知道近期7天的留存。怎麽得到近期7天的日期?
  • 測試中常常須要改系統時間,可是改系統時間這段時間內假設做其他操作會受影響,比方改動文件會導致文件的時間受影響,提交代碼時間也亂套。怎麽解決?
  • 這個月有幾天?
  • 去年的今天?昨日的這個時候?2小時後?
  • ...

遇到這些場景,用python內置函數的話基本上都要對著官方文檔查,或者google或者stackoverflow一番。datetime、date、timestamp、時間字符串之間的互相轉換可夠頭痛的了, ‘%Y-%m-%d %H:%M:%S‘之類的滿屏幕亂飄。


在這種情況下,sandglass庫誕生了。解脫了,主要函數就2個。ben()tslice()。庫的核心是Sandglass對象。當中Sandglass的意思是“沙漏”。ben是“大本鐘”。用python的基本都知道python的切片非常靈活。tslice就是類似這種一個東西用來生產時間序列。
通過ben(),能夠高速的通過各種時間信息獲得Sandglass對象,而通過Sandglass對象。 能夠獲取各種信息和操作。


Sandglass對象相當於一個中轉站。使得各種轉換變得簡單。

這樣的理念有點類似轉碼。各種編碼->unicode->各種編碼。unicode就是中轉站。
好了,以下演示一下用sandglass庫怎麽解決上面那些需求。

>>>from sandglass import ben,tslice,Sandglass
#2014年六一兒童節那天的時間戳是多少?
>>>ben(‘2014-06-01‘).timestamp
#2014年六一兒童節那天是星期幾?
>>>ben(‘2014-06-01‘).isoweekday
#datetime對象轉成字符串後面往往帶小數點。即微秒,而我存到數據庫是不須要微秒的,怎麽搞?
>>>

now = ben()
>>>now.sql
#從配置中讀取、網絡中傳輸、數據庫存儲獲取到的時間信息是字符串的。怎麽轉成能夠用於運算的對象?
>>>ben(1399387043.898),ben(‘2014-02-03‘),ben(‘2014,2,3‘),ben(‘2014/2/3‘),ben(‘19:20:00‘)
#要知道近期7天的留存。怎麽得到近期7天的日期?
>>>tslice(‘day‘,start=None,end=None,step=-1,count=7)
#測試中常常須要改系統時間。可是改系統時間這段時間內假設做其他操作會受影響,比方改動文件會導致文件的時間受影響,提交代碼時間也亂套,怎麽解決?
>>>Sandglass.mock(day=1)#把當前日期改成明天,全部ben()或者Sandglass.now()獲取的時間都受影響
#這個月有幾天?
>>>ben().days_in_month
#去年的今天?昨日的這個時候?2小時後?
>>>ben().shift(year=-1),ben().shift(day=-1),ben().shift(hour=2)

很多其它詳情請點擊 項目 地址。

sandglass(沙漏)——一個讓人解脫的python時間處理庫