1. 程式人生 > 程式設計 >Python量化交易基礎講堂-Python時間模組大全之time

Python量化交易基礎講堂-Python時間模組大全之time

《Python實戰-構建基於股票的量化交易系統》小冊子,雖然主要側重於 Python 實戰講解,但在內容設計上提供了前置基礎章節幫助讀者快速掌握基礎工具的使用,因此小冊適合的人群僅具備Python最基礎程式設計經驗即可。

同時我們會持續更新一些關於Python和量化相關的基礎文章,幫助大家夯實基礎。接下來我們介紹下Python中時間模組大全之time。

Python中提供處理時間日期相關的內建模組有time、datetime和calendar。

time模組中大多數函式呼叫了所在平臺C library 的同名函式,因此更依賴於作業系統層面,所以time模組的有些函式與平臺相關,在不同的平臺上可能會有不同的效果,這點需要特別注意下,即time模組的功能並不適用於所有平臺。

使用時需要匯入time模組,如下所示:

import time
複製程式碼

time模組的時間表現的格式主要有以下三種:

  • timestamp時間戳。時間戳表示的是從新紀元開始按秒計算的偏移量,任何作業系統都可以執行time.gmtime(0)查詢此係統的新紀元。對於時間戳的最大極限日期取決於系統中C函式庫所支援的日期,對於32位系統而言為2038年,如果需要處理在所述範圍之外的日期,則需要考慮使用datetime模組。如下所示:
#查詢此係統的新紀元 
print(time.gmtime(0))
#time.struct_time(tm_year=1970,tm_mon=1,tm_mday=1,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=3,tm_yday=1,tm_isdst=0)
#生成當前時間的timestamp print(time.time())#1556973222.546307 複製程式碼
  • struct_time時間元組,共有九個元素組,gmtime()、localtime()和strptime()都以時間元祖(struct_time)的形式返回。如下所示:
#生成struct_time
print(time.localtime())#time.struct_time(tm_year=2019,tm_mon=5,tm_mday=11,tm_hour=12,tm_min=20,tm_sec=58,tm_wday=5,tm_yday=131,tm_isdst=0)
複製程式碼

struct_time九個元素組屬性與值對應關係如下:

  • format time格式化時間。格式化的結構可使得時間更具有可讀性,主要有自定義格式和固定格式兩種,比如:
#生成format_time
#生成自定義格式的時間表示格式
print(time.strftime("%Y-%m-%d %X",time.localtime()))#2019-05-04 20:40:01
#生成固定格式的時間表示格式
print(time.asctime(time.localtime()))#Sat May 11 19:45:16 2019
print(time.ctime(time.time()))#Sat May 11 19:45:16 2019
print(time.ctime(time.time()+10))#Sat May 11 19:45:26 2019
複製程式碼

format time結構化格式表示含義如下:

time模組中timestamp、struct_time和format time三種時間格式按以下方式轉換:

#struct_time to timestamp  note:time.localtime()——struct_time
print(time.mktime(time.localtime()))
#1556975223.0

# timestamp to struct_time 格林威治時間 note:time.time()——timestamp
print(time.gmtime(time.time()))
#time.struct_time(tm_year=2019,tm_hour=4,tm_isdst=0)
複製程式碼

#format_time to struct_time
print(time.strptime('2011-05-05 16:37:06','%Y-%m-%d %X'))
#time.struct_time(tm_year=2011,tm_mday=5,tm_hour=16,tm_min=37,tm_sec=6,tm_yday=125,tm_isdst=-1)

#struct_time to format_time
print(time.strftime("%Y-%m-%d %X"))#2019-05-11 08:45:48
print(time.strftime("%Y-%m-%d %X",time.localtime()))#2019-05-11 08:45:48

複製程式碼

關於time.asctime()和time.ctime()在上文中已經提到,可以分別將struct_time和timestamp時間格式生成固定的format time格式。

time模組中關於系統時間的處理有如下幾個函式:

time.clock()以秒為單位返回當前CPU執行時間,用於衡量不同程式的耗時,比time.time()更實用。不過在Python3.3之後就不推薦使用,原因是該方法依賴於作業系統,官方建議使用per_counter(返回系統執行時間)或process_time(返回程式執行時間)代替。如下所示:

print(time.clock())#0.221209
#DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead

複製程式碼

time.perf_counter()返回系統的執行時間(計時器的精準時間),包含整個系統的睡眠時間。由於返回值的基準點是未定義的,所以只有連續呼叫的結果之間的差才是有效的。如下所示:

print(time.perf_counter())#4.373607855
time.sleep(5)
print(time.perf_counter())#9.374290978
複製程式碼

time.process_time()返回當前程式執行CPU的時間總和,不包含睡眠時間.由於返回值的基準點是未定義的,所以只有連續呼叫的結果之間的差才是有效的。如下所示:

print(time.process_time())#0.385954
time.sleep(5)
print(time.process_time())#0.385982

time.sleep(secs)推遲呼叫執行緒的執行,secs的單位是秒。如下所示:
time.sleep(5)
複製程式碼

關於完整程式碼可以加入小冊交流群獲取。更多的量化交易內容歡迎大家訂閱小冊閱讀!!