【💊 Python的解憂錦囊】Milliseconds To hh:mm:ss(毫秒轉成小時、分鐘和秒)

更新於 發佈於 閱讀時間約 5 分鐘
圖片來源

圖片來源

您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。

有時候我們在處理字幕檔或者是音訊時, 常常會計算時間這個單位, 例如: 這個字幕檔的長度多少毫秒(milliseconds)、這段音檔多少毫秒(milliseconds), 當然也有可能是「秒(seconds)」, 但最終呈現給使用者的部份通常會是格式化過後的顯示方式, 例如: 小時:分鐘:秒 這是一種比較常見的格式化轉換的結果, 那在Python世界我們可以怎麼做呢? 在這邊我們會帶給您最簡易的轉換方式, 尤其是可以復用的API為最高原則, 避免自行重複實作增加BUG的風險, 為什麼減少BUG很重要? 請參閱「【🔒 Python 先修班】用心 🛡️ 守護我們辛苦打造的程式(Unit Test單元測試防護指南)」。

介紹一下今天的主角: timedelta

圖片來源

圖片來源

timedelta是Python中內建的datatime子類別, 它擅長處理日期與時間上的各種運算, 這裡就來簡介一下基本的一些常見用法:

from datetime import timedelta, datetime

# 💻 timedelta(時間單位)
thirty_minutes = timedelta(minutes=30)
# 0:30:00

# 現在時間
now = datetime.now()

after_thirty_minutes = now + thirty_minutes
# 30分鐘後的時間
# 2023-08-28 16:02:06.757500

簡單來說, timedelta可以進行時間的加減、轉換, 讓我們在處理時間時更加標準與簡易。

今日重點: 如何轉換(Milliseconds To hh:mm:ss)

使用餘數技巧「divmod(a, b)」

圖片來源

圖片來源

# 13除以2 = 61
# => 6, 1 = divmod(13, 2)
quotient, remainder = divmod(13, 2)

有了餘數技巧之後, 我們就可以依序轉換從「毫秒/秒」 → 「小時」 → 「分鐘」。

善用timedelta裡面的total_seconds()

圖片來源

圖片來源

正好在timedelta裡有total_seconds()這個API可以幫我們將時間單位統一換算成總秒數, 那呼應上述的餘數技巧我們就可以進行逐步換算, 如果不懂也沒關係, 底下我們實際轉換一次給您看。

讓我們動動手撰寫一套方法來轉換一下

圖片來源

圖片來源

我們底下的程式碼稍做修改,因為不足一秒的部分也盡量顯示出來,才不會有一些四捨五入的誤差問題, 因此我們會以hh:mm:ss.fff為實作範例如下:

from datetime import timedelta

def milliseconds_to_hmsf(milliseconds: int) -> str:
"""毫秒轉hh:mm:ss.ffff
"""
time_delta = timedelta(milliseconds=milliseconds)
total_seconds = time_delta.total_seconds()

# 1小時3600
seconds_in_hours = timedelta(hours=1).total_seconds()

# 1分鐘60
seconds_in_minute = timedelta(minutes=1).total_seconds()

# 小時, 剩餘小時的秒數 = 總秒數/3600(1小時=3600)
hours, remainder = divmod(total_seconds, seconds_in_hours)

# 分鐘, 剩餘秒數 = 剩餘小時的秒數/60(1分鐘=60)
minutes, seconds = divmod(remainder, seconds_in_minute)

# 秒, 毫秒 = 剩餘秒數的整數部分和毫秒部分
seconds_int = int(seconds)
milliseconds = int((seconds - seconds_int) * 1000)


return f'{int(hours):02}:{int(minutes):02}:{seconds_int:02}.{milliseconds:03}'

print(milliseconds_to_hms(6000))

結語

處理時間也是常常會使用到的環節, 像是統計區間資料、計算音檔長度、日期選擇、日期轉換…,都與時間離不開關係, 因此我們可以善用datetime與timedelta來處理這些部份, 會比我們自行實作來的更可靠、更快速。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
129會員
287內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
日期時間 時間日期在計算機科學和日常生活中都非常重要。時間:時間是一個連續的概念,用來衡量事件發生的順序和持續的時間。時間通常以不同的單位來表示,包括秒、分鐘、小時、天、月和年等。日期:日期是時間的一個特定點,通常包括年、月和日。
Thumbnail
日期時間 時間日期在計算機科學和日常生活中都非常重要。時間:時間是一個連續的概念,用來衡量事件發生的順序和持續的時間。時間通常以不同的單位來表示,包括秒、分鐘、小時、天、月和年等。日期:日期是時間的一個特定點,通常包括年、月和日。
Thumbnail
資料型態-變數概念 上面這張圖片傳傳達了三個概念, 常值:可以是數值、浮點數、字串、布林等資料, 變數名稱:這邊也很好理解,就是好記得名稱,這邊使用中文是方便初學者入門, 盒子:代表在Python底層運作的狀況,Python創建變數時,會先在記憶體創建型態物件,這邊是數字型態,所以創建數字物件。
Thumbnail
資料型態-變數概念 上面這張圖片傳傳達了三個概念, 常值:可以是數值、浮點數、字串、布林等資料, 變數名稱:這邊也很好理解,就是好記得名稱,這邊使用中文是方便初學者入門, 盒子:代表在Python底層運作的狀況,Python創建變數時,會先在記憶體創建型態物件,這邊是數字型態,所以創建數字物件。
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 有時候我們在處理字幕檔或者是音訊時, 常常會計算時間這
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 有時候我們在處理字幕檔或者是音訊時, 常常會計算時間這
Thumbnail
Python time模組是一個提供時間相關功能的模組,可以用來獲取當前時間、格式化時間、延遲執行、測量執行時間等,今天將介紹time模組的常用函數和用法。   1. 獲取當前時間 time模組提供了多種獲取當前時間的函數,例如: time.time():返回當前時間的時間戳,即從1970
Thumbnail
Python time模組是一個提供時間相關功能的模組,可以用來獲取當前時間、格式化時間、延遲執行、測量執行時間等,今天將介紹time模組的常用函數和用法。   1. 獲取當前時間 time模組提供了多種獲取當前時間的函數,例如: time.time():返回當前時間的時間戳,即從1970
Thumbnail
Python是一種廣泛使用的程式語言,它有許多內建的模組可以幫助我們進行各種數學運算,其中一個就是math模組,它提供了許多標準的數學函數,例如三角函數、對數函數、指數函數等,在這篇文章中,我們將介紹如何使用math模組。 導入math模組並計算圓周率的值: # 計算圓周率的值 math模組中
Thumbnail
Python是一種廣泛使用的程式語言,它有許多內建的模組可以幫助我們進行各種數學運算,其中一個就是math模組,它提供了許多標準的數學函數,例如三角函數、對數函數、指數函數等,在這篇文章中,我們將介紹如何使用math模組。 導入math模組並計算圓周率的值: # 計算圓周率的值 math模組中
Thumbnail
一、自動轉型-二、明確轉型-三、Parse方法-補充、日期時間的轉換>>> 當我們在撰寫程式過程中,有可能會遇到在做資料處理時與一開始宣告的資料型別不一樣,這時就會需要資料型別轉換了。那這邊有四種轉換介紹: 一、自動轉型 運算過程中在精確度不會改變時,程式就會自動幫我們做轉型處理,什麼意思呢?就是
Thumbnail
一、自動轉型-二、明確轉型-三、Parse方法-補充、日期時間的轉換>>> 當我們在撰寫程式過程中,有可能會遇到在做資料處理時與一開始宣告的資料型別不一樣,這時就會需要資料型別轉換了。那這邊有四種轉換介紹: 一、自動轉型 運算過程中在精確度不會改變時,程式就會自動幫我們做轉型處理,什麼意思呢?就是
Thumbnail
■視頻重點摘要 ●符號及運算 單位脈衝 δ[n]=u[n]-u[n-1] 單位步階 u[n] 脈衝信號 h[n] 序列信號 x[n] ●Z轉換 y[n]=h[n]*x[n] 為 Time - Domain 的差分方程式 (式中*為卷積) 頻率響應指頻率的放大倍數
Thumbnail
■視頻重點摘要 ●符號及運算 單位脈衝 δ[n]=u[n]-u[n-1] 單位步階 u[n] 脈衝信號 h[n] 序列信號 x[n] ●Z轉換 y[n]=h[n]*x[n] 為 Time - Domain 的差分方程式 (式中*為卷積) 頻率響應指頻率的放大倍數
Thumbnail
這是一篇關於 CSS 動畫屬性的學習筆記,如果你剛好也在學習的話,歡迎進來看看!
Thumbnail
這是一篇關於 CSS 動畫屬性的學習筆記,如果你剛好也在學習的話,歡迎進來看看!
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
  上篇文章介紹物理學家如何定義瞬時速度,本篇文章將延續上回文章脈絡,帶領讀者從回顧瞬時速度的由來,一般化瞬時速度的定義,最後引入導數和可微分的的定義,說明導數、瞬間變化率、可微分,牽涉到同一極限的觀念,讓讀者由現實世界逐步走入抽象世界。
Thumbnail
  上篇文章介紹物理學家如何定義瞬時速度,本篇文章將延續上回文章脈絡,帶領讀者從回顧瞬時速度的由來,一般化瞬時速度的定義,最後引入導數和可微分的的定義,說明導數、瞬間變化率、可微分,牽涉到同一極限的觀念,讓讀者由現實世界逐步走入抽象世界。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News