【💊 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
118會員
263內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
我們開發程式的過程中難免會依賴DB或其他服務, 但複雜的網路環境下我們並沒有辦法確保我們發送的請求是否正確的送達, 因此我們可以在程式中加入Retry機制, 提升我們軟體的強健性。 然而在Python的程式語言裡正好有一個 tenacity 套件非常適合讓我們的Retry作業更加順利, 它是一
這個章節雖然發生問題, 但也很好的為我們如何解決問題的能力而訓練, 我們也會搭配AI來幫我們找問題, 當然也會一五一十的告訴您該如何問對問題, 關於問對問題很重要可以參考「」, 我們相信過程會對大家有幫助, 請耐心閱讀…, 我們會告訴您AI說正確但事實上並非正確的情境。 我們在「【🔒 Pytho
我們在「【資料處理神器區 - Pytube系列】 蒐集情報讓數據會說話」有介紹怎麼分析Youtube影音資訊,但過程中卻遇到了一些問題...,沒關係,動動手做個Maker來解決麻煩吧! 前景提要 故事是這樣的, 小明在使用pytube進行Youtube頻道的分析時, 發現到奇怪, 原本抓影片可以
我們在「【Python 軍火庫 - PySubs2】 字幕檔提取工具的好幫手(ass、ssa、srt、vtt…)」有稍微跟大家介紹了字幕檔處理工具的基本用法,相信對於讀取字幕,更改文字內容應該是再容易不過的事了,咦…,但我們好像都沒有看到關於新增「段落」的資訊耶,不曉得是我沒有仔細尋找還是真的沒
我們在「」有稍微介紹了JSON格式, 也知曉JSON格式非常簡單暴力, 只要一對<key>與<value>就能成行, 對於工程人員來說已經比XML、文字檔…等傳統格式更加容易理解, 而且也具備一定的資料型態基礎, 但使用這麼久以來常常發現到想要對某個欄位註解時好像不太容易, 頂多就是多一個欄位叫做「
JSON 全名 JavaScript Object Notation,其格式基本上就是key: value的組成如下: { "name": "Bob", "age": 40, "childs": [ { "name": "Justin", "
我們開發程式的過程中難免會依賴DB或其他服務, 但複雜的網路環境下我們並沒有辦法確保我們發送的請求是否正確的送達, 因此我們可以在程式中加入Retry機制, 提升我們軟體的強健性。 然而在Python的程式語言裡正好有一個 tenacity 套件非常適合讓我們的Retry作業更加順利, 它是一
這個章節雖然發生問題, 但也很好的為我們如何解決問題的能力而訓練, 我們也會搭配AI來幫我們找問題, 當然也會一五一十的告訴您該如何問對問題, 關於問對問題很重要可以參考「」, 我們相信過程會對大家有幫助, 請耐心閱讀…, 我們會告訴您AI說正確但事實上並非正確的情境。 我們在「【🔒 Pytho
我們在「【資料處理神器區 - Pytube系列】 蒐集情報讓數據會說話」有介紹怎麼分析Youtube影音資訊,但過程中卻遇到了一些問題...,沒關係,動動手做個Maker來解決麻煩吧! 前景提要 故事是這樣的, 小明在使用pytube進行Youtube頻道的分析時, 發現到奇怪, 原本抓影片可以
我們在「【Python 軍火庫 - PySubs2】 字幕檔提取工具的好幫手(ass、ssa、srt、vtt…)」有稍微跟大家介紹了字幕檔處理工具的基本用法,相信對於讀取字幕,更改文字內容應該是再容易不過的事了,咦…,但我們好像都沒有看到關於新增「段落」的資訊耶,不曉得是我沒有仔細尋找還是真的沒
我們在「」有稍微介紹了JSON格式, 也知曉JSON格式非常簡單暴力, 只要一對<key>與<value>就能成行, 對於工程人員來說已經比XML、文字檔…等傳統格式更加容易理解, 而且也具備一定的資料型態基礎, 但使用這麼久以來常常發現到想要對某個欄位註解時好像不太容易, 頂多就是多一個欄位叫做「
JSON 全名 JavaScript Object Notation,其格式基本上就是key: value的組成如下: { "name": "Bob", "age": 40, "childs": [ { "name": "Justin", "
你可能也想看
Google News 追蹤
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
一天24小時,每個人的時間都一樣,但不管時針分針怎麼指,真正的時間會變短、變長、變快與變慢,和格林威治的不同。只要在適合與屬於自己的時區內,不論快慢都是對的時間。此外,這個月最大的改變是意象練習的know how,意象練習的運用領域廣泛,尤其在需要高度專注與瞬間判斷的決策環境。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】,談論時間管理容易讓人誤解,我們能管理時間,增加效率,但是那樣的作用並不大,我們真正能管理的是,什麼對我們來說最重要,這要回推到以終為始,你想成為什麼樣的人,就是做那樣的事!
Thumbnail
本文介紹如何使用 ChatGPT 4 計算兩個民國日期之間的差異。同時提到了使用函數 DATEDIF 和神奇的【R鍵】來解決問題。
Thumbnail
工時計算在一般的狀況下就是將『結束時間-開始時間』就會得到工時數。 為什麼可以時間可以直接相減? 延伸閱讀:搞懂EXCEL最常用也最難搞懂的日期&時間 但是如果遇到有輪班的時候,結束時間有可能會跨天,這時候直接『結束時間-開始時間』就會發生錯誤,原因是跨天後的結束時間<開始時間,而
Thumbnail
在這個快速變化的時代,時間的價值被無限放大。每個人都有相同的24小時,但是如何運用這些時間,卻決定了每個人的未來和命運。
Thumbnail
小時候看神怪小說,常會提到一個概念,天上神仙過一天的時間,人間已過了一年,有一首詩也提到:「山中無甲子,寒盡不知年。」長大之後才發現這是科學的,愛因斯坦的相對論解釋了我們在日常生活中共有的感受,原來時間從來不是等速流動的,它時而飛逝,時而緩慢停滯。     對時間快慢的感受是因人因情境而異的。
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
一天24小時,每個人的時間都一樣,但不管時針分針怎麼指,真正的時間會變短、變長、變快與變慢,和格林威治的不同。只要在適合與屬於自己的時區內,不論快慢都是對的時間。此外,這個月最大的改變是意象練習的know how,意象練習的運用領域廣泛,尤其在需要高度專注與瞬間判斷的決策環境。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】,談論時間管理容易讓人誤解,我們能管理時間,增加效率,但是那樣的作用並不大,我們真正能管理的是,什麼對我們來說最重要,這要回推到以終為始,你想成為什麼樣的人,就是做那樣的事!
Thumbnail
本文介紹如何使用 ChatGPT 4 計算兩個民國日期之間的差異。同時提到了使用函數 DATEDIF 和神奇的【R鍵】來解決問題。
Thumbnail
工時計算在一般的狀況下就是將『結束時間-開始時間』就會得到工時數。 為什麼可以時間可以直接相減? 延伸閱讀:搞懂EXCEL最常用也最難搞懂的日期&時間 但是如果遇到有輪班的時候,結束時間有可能會跨天,這時候直接『結束時間-開始時間』就會發生錯誤,原因是跨天後的結束時間<開始時間,而
Thumbnail
在這個快速變化的時代,時間的價值被無限放大。每個人都有相同的24小時,但是如何運用這些時間,卻決定了每個人的未來和命運。
Thumbnail
小時候看神怪小說,常會提到一個概念,天上神仙過一天的時間,人間已過了一年,有一首詩也提到:「山中無甲子,寒盡不知年。」長大之後才發現這是科學的,愛因斯坦的相對論解釋了我們在日常生活中共有的感受,原來時間從來不是等速流動的,它時而飛逝,時而緩慢停滯。     對時間快慢的感受是因人因情境而異的。