天天看點

分享Python之time子產品把前後兩個時間戳之差顯示為标準【小時:分】(H:M)時間格式的技巧

Python 之 time 子產品的 time() 函數生成一組格式為 10 位數的浮點數被稱之為時間戳,它是從格林威治時間 1970年1月1日 00:00:00 起至此時過去的總秒數。

1、調用time()的方法

子產品名.函數名:time.time()

import time,random

def P(s, c=''): # 列印值和值的類型的自定義函數,參數 s 為列印的值,參數 c 為值的說明文字(預設為空)
    return print('{}\n值為:{}\n類型為:{}\n'.format(('' if c == '' else '\n'+c),s,type(s)))

# 取系統目前時間戳
time0 = time.time()
P(time0)
           

輸出結果如下:

  值為:1656081341.2252388

  類型為:<class ‘float’>

附上 time 庫幾個常用函數和例子:

time.strptime():将特定字元串格式的時間,轉換為struct_time

time.strftime():将struct_time,轉換為特定字元串格式的時間

time.time():将目前時間轉換為時間戳

time.mktime():将struct_time轉換為時間戳,輸入當地struct_time,輸出格林威治時間戳

time.localtime():将時間戳轉換為struct_time(當地時間)

time.gmtime():将時間戳轉換為struct_time(格林威治時間)

localtime 與 gmtime 兩者關系:例如,localtime 在東八區的中原標準時間 + 8小時(時間戳加上 8×60×60 = 28800 秒)= gmtime 在中時區的格林威治時間,換言之:格林威治時間比中原標準時間晚 8 個小時。

例子:

取當地日期時間 current_time 的語句為:time.localtime()

值為:struct_time(tm_year=2022, tm_mon=6, tm_mday=26, tm_hour=22, tm_min=5, tm_sec=10, tm_wday=6, tm_yday=177, tm_isdst=0)

類型為:<class ‘struct_time’>

将 current_time 轉換為字元串型 date 标準格式公曆日期時間的語句為:time.strftime(“%Y-%m-%d %H:%M:%S”, current_time)

值為:2022-06-26 22:05:10

類型為:<class ‘str’>

将 date 轉換為 timestamp 格林威治時間戳的語句為:time.time(time.strptime(date,“%Y-%m-%d %H:%M:%S”))

值為:1656252310.0

類型為:<class ‘float’>

将 timestamp 加 12 小時轉換為字元串型标準格式【格林威治】公曆日期時間的語句為:time.strftime(‘%Y-%m-%d %H:%M:%S’, time.gmtime(timestamp + 12×60×60))

值為:2022-06-27 02:05:10

類型為:<class ‘str’>

将 timestamp 加 12 小時轉換為字元串型标準格式【當地】公曆日期時間的語句為:time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime(timestamp + 12×60×60))

值為:2022-06-27 10:05:10

類型為:<class ‘str’>

如何将 date = ‘【20220203^120356】’ 等式右邊資料轉換為标準日期時間格式?

先轉為時間戳,語句是:timestamp = time.mktime(time.strptime(date,“【%Y%m%d^%H%M%S】”))

值為:1643862236.0

類型為:<class ‘float’>

再轉為标準日期時間格式,語句是:date = time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime(timestamp))

值為:2022-02-03 12:03:56

類型為:<class ‘str’>

2、通常前後兩個時間戳之差是秒數之差

采用預設的10位數字時間戳機關是秒,前後兩個時間戳之差是秒數之差。有人為了增加計算的精度,将時間戳擴大1000倍,以毫秒為機關計數,此時間戳變為13位數字。需要強調的“秒”轉換為“毫秒”是1000倍,千萬别想當然記成“分”轉換“秒”的60倍,如果采用13位數字時間戳,前後兩個時間戳之差就是毫秒數之差。當然,也可以通過類型變換,變成小時數之差(見本文第3條)。

# 随機延長1-10秒
time.sleep(random.uniform(1-10秒))
time1 = time.time()
t = time1-time0
P(t)
           

輸出結果如下:

  值為:5.554218292236328

  類型為:<class ‘float’>

3、将時間戳之差變成标準的【小時:分】(H:M)格式的方法

【小時】取值采用 t 值除以3600取整得到,【分】取值采用 t 值除以60再用60進行模運算取整得到。最後,采用 2 位右對齊空位填 0 即 {:0>2} 得到工整的輸出格式。

# 為了顯示【小時:分】格式,将前邊的時間戳之差 t 放大3600倍,由秒差變為小時差
t = t*60*60
P('标準時間格式:{:0>2}:{:0>2}'.format(int(t/3600),int(t/60%60)))
           

輸出結果如下:

  标準時間格式:05:33

  類型為:<class ‘str’>

  希望以上分享對您有啟發或幫助。