HH:MM:SS 換算公式會將任意非負整數秒數分解為時、分、秒,過程使用三次向下取整除法:小時 = floor(總秒數 ÷ 3,600)、分鐘 = floor((總秒數 mod 3,600) ÷ 60)、秒數 = 總秒數 mod 60。這個公式是將以 SI 秒表示的經過時間長度轉為人類可讀字串的標準做法,其中 1 小時等於 3,600 秒、1 分鐘等於 60 秒,其定義載於 BIPM SI 小手冊。不同於在小時到達 24 就進位的時鐘時間格式,這種換算會保留每一個完整小時,因此跨日數的時間長度仍可逆轉還原:將小時乘以 3,600、分鐘乘以 60,再加上秒欄位,即可精確還原為原本的總秒數。整個計算採用整數餘數而非四捨五入的小數,因此輸出結果不會帶有浮點數尾巴。這個公式是任何將經過秒數格式化以供記錄檔、計時器、運動紀錄、媒體長度、工作執行時間以及簡單資料清理使用的工具的骨幹。它不會處理日期、時區、日光節約時間、閏秒或月份這類曆法概念。

換算公式中的三個變數
這個公式接收單一輸入並產生三個輸出變數。理解每個變數所代表的意義,正是讓這個公式在程式碼或文件中出現時易於審核的關鍵。
第一個變數是 H,也就是小時欄位。其計算方式為 floor(總秒數 ÷ 3,600),因此它會計算經過時間長度中每一個完整的小時。當輸入為 98,765 秒時,H 會變成 27,因為 27 × 3,600 = 97,200 個整數秒會被吸收進小時欄位,剩餘的餘數小於一個完整的小時。
第二個變數是 M,也就是分鐘欄位。其計算方式為 floor((總秒數 mod 3,600) ÷ 60)。在扣除小時之後,剩餘的秒數會再除以完整的分鐘數。M 的範圍會被限制在 0 到 59 之間,因為每一個完整的 60 秒區塊都會被抽出作為一分鐘;這個限制內建於餘數運算之中,並非後來才附加上去。
第三個變數是 S,也就是秒欄位。其計算方式為總秒數 mod 60。在扣除小時與分鐘之後所剩下的部分即為秒欄位,它的範圍同樣在建構上就被限制在 0 到 59 之間。HH:MM:SS 這個表示法只是一種排版慣例:一般情況下 H 的值會補零至兩位數(所以 1 小時會顯示為 01),M 與 S 一律為兩位數,而當時間長度達到一天以上時,H 可以超過兩位數。
| 面向 | 經過時間長度公式 | 時鐘時間格式 |
|---|---|---|
| 小時欄位範圍 | 無上限;可超過 99 | 00 至 23 |
| 日期意義 | 不使用 | 於 24:00 隱含日期進位 |
| 還原為秒數 | 精確:H × 3,600 + M × 60 + S | 需要天數計數或曆元參考點 |
| 時區 | 未套用 | 必須另外套用 |
| 日光節約時間 | 未套用 | 可能使數值偏移一個小時 |
| 閏秒 | 未套用 | 未套用 |
| 輸出樣式 | HH:MM:SS,小時可成長 | HH:MM:SS,小時上限為 23 |
補零與格式化慣例
這個公式決定哪個整數進入哪個欄位,但另一套獨立的格式化規則則決定每個欄位該如何書寫。一般的小時值會被補零至兩位數,使得單位數的小時與多位數的小時在視覺上等寬:1 小時會變成 01,9 小時會變成 09,10 小時則保持為 10。這符合 HH:MM:SS 的慣用排版方式,也讓對齊顯示在記錄檔與報表中整齊排列。
分鐘與秒一律為兩位數,10 以下的值會以前置零補零。這是由餘數運算所強制的:M 與 S 保證會落在 0 到 59 之間,而兩位數的顯示方式消除了單位數欄位可能帶來的視覺模糊。小時可以超過兩位數;125 小時的時間長度會顯示為 125,而不是被截斷為 25。截斷會捨棄經過的時間,使輸出變得不可逆。
將公式套用至整數秒數
- 將輸入讀取為一個非負整數秒數,不含小數也不含負號。
- 計算 H = floor(輸入秒數 ÷ 3,600),並將該整數儲存為小時欄位。
- 以輸入秒數 mod 3,600 計算扣除小時後的餘數,並將其儲存為 R。
- 計算 M = floor(R ÷ 60),並將該整數儲存為分鐘欄位。
- 計算 S = R mod 60,並將該整數儲存為秒欄位。
- 將輸出格式化為 HH:MM:SS,對一般數值的 H 補零至兩位數,而當 H 超過 99 時則保留其完整寬度,M 與 S 則一律補零至兩位數。
計算範例:98,765 秒
將 98,765 代入公式會得到 27:26:05。以下是完整的逐步運算過程。
H = floor(98,765 ÷ 3,600) = floor(27.4347…) = 27。這個 27 吸收了 27 × 3,600 = 97,200 秒。
R = 98,765 mod 3,600 = 1,565。M = floor(1,565 ÷ 60) = floor(26.0833…) = 26。這個 26 吸收了 26 × 60 = 1,560 秒。
S = 1,565 mod 60 = 5。格式化結果:27:26:05。
驗算:27 × 3,600 + 26 × 60 + 5 = 97,200 + 1,560 + 5 = 98,765。這個公式是可逆的。
98,765 秒的時間長度刻意不會被顯示為 03:26:05,因為那會捨棄一整天。輸出保留了總經過時間,使其能毫無歧義地還原回原本的秒數。一個套用此公式的實用工具是 秒數轉 HMS 換算器,它執行同樣的三次向下取整除法,並在小時欄位不會於 24 進位的前提下,將 H、M 與 S 欄位展示在一張可複製的分解卡上。
公式的適用情境
這個換算是在許多實際情境中將經過的 SI 秒數表示出來的標準方式。記錄檔、計時器、運動紀錄、媒體長度、工作執行時間以及測試輸出,都能受益於 HH:MM:SS 格式,因為人眼掃讀冒號分隔字串的速度遠快於原始的秒數整數。
在媒體長度方面,這個公式正是大多數影片與音訊播放器透過其中繼資料檢視器或長度 API 所曝露的內容。在運動紀錄方面,這個公式會將穿戴式裝置的秒數計數轉為跑步或運動摘要。在工作執行時間方面,這個公式為建置管線與批次工作提供易於掃讀的總計,而可逆性意味著只要看一眼結果,就足以估算出原本的整數,而無需查看來源程式碼。
這個公式刻意不會將時間長度解讀為時鐘時間。它不會套用時區、不會處理日光節約轉換、不會插入閏秒,也不會與月份長度進行調和。整個運算僅描述經過的 SI 秒數,如 NIST 的 SI 單位寫作指南 所引用。
限制與排除的輸入
這個公式有三個實際限制,會影響哪些輸入會被接受。
第一,輸入必須是非負整數秒數。像 1.5 秒這樣的小數值落在這個公式的適用範圍之外,因為小數秒數需要另一套精度與分隔符慣例(毫秒、微秒或其他單位)。像 1.5 秒這樣的值可以表示為 1500 毫秒,但那同時混合了單位變更與精度變更,這已經超出這個公式的範圍。對於小數秒、毫秒或微秒,應使用專門的時間單位換算器,而不是這個公式。
第二,負值會被拒絕。這個公式描述的是經過的時間區間,根據定義就是非負的;帶正負號的偏移量屬於另一個軸,並不屬於這個換算的一部分。
第三,輸入必須維持在能夠精確表示的最大安全整數之內:9,007,199,254,740,991。超過這個上限,鄰近的整數會被壓縮成同一個浮點數值,可能會在無聲無息中產生錯誤的秒欄位。這個明確的限制寧可選擇一個可供稽核的錯誤,也不要一個看似合理但不夠精確的時間戳記。在這個上限內的每個整數都能被精確表示,因此在向下取整除法的過程中不會損失任何精度。
如果目標需要天數加上 00–23 的時鐘欄位,請另行將總數除開,或使用一個能曝露天數元件的時間長度格式化工具。如果目標需要 ISO 8601 時間長度語法(例如 PT27H26M5S),請不要重新標記冒號字串;請輸出目標所需的語法,而不是把 HH:MM:SS 當作替代品。
將公式反推回秒數
由於這個公式採用向下取整除法與精確的餘數,輸出結果是完全可逆的。要從 HH:MM:SS 字串還原為原本的秒數,請將小時欄位乘以 3,600,將分鐘欄位乘以 60,再將兩者與秒欄位相加。
以 27:26:05 為例,這代表 27 × 3,600 + 26 × 60 + 5 = 97,200 + 1,560 + 5 = 98,765 秒。可逆性正是將經過時間長度輸出與時鐘時間輸出區分開來的關鍵:像 03:26:05 這樣的時鐘時間字串無法在不先知道它發生在哪一天的情況下還原為秒數,而經過時間長度字串則永遠會對應回唯一一個整數。
可逆性的一個實際用途是資料清理。在試算表或記錄檔中有一整欄 HH:MM:SS 字串時,將小時乘以 3,600、分鐘乘以 60,再加上秒欄位,就會得到一個可排序的整數,可用於跨列比較。這正是這個公式用於排序執行時間、排名運動紀錄或依長度將媒體片段分群時所使用的相同形式,而且整個過程無需任何外部查找表。
延伸閱讀:如何求扇形面積:公式、單位與步驟。
延伸閱讀:如何將時間換算為小時:公式與免費工具。