こんにちは、阿久梨絵です!
「08:05」という 時刻 。見た目はシンプルですが、内部でどのように保持するかは設計次第です。
文字列として扱うべきか、数値か、Date型か、それとも分単位の整数か。
用途によって最適な定義は異なりますが、共通して言えるのは——
見た目とロジックは分けて考えるべきということです。
昔の工夫:桁を揃えてソートしやすくする方法
08:05 → 10805
13:45 → 11345
・先頭に「1」を追加して5桁に固定
・文字列としてソート可能
・ただし、人間には読みにくく、演算には不向きです
この方法は、レガシーな環境でよく使われていましたが、
現在の開発環境では、よりスマートな選択肢があります。
現代の定番:分単位の整数+表示フォーマット
内部定義:分単位の数値(int)
08:05 → 485
13:45 → 825
・加算・減算・差分・比較が圧倒的に楽です
・ソートも自然(数値昇順)
・表示は `”HH:MM”` に変換すれば問題ありません
表示変換:ゼロ埋め+フォーマット関数
JavaScriptの例
function formatTime(minutes) {
const h = String(Math.floor(minutes / 60)).padStart(2, ‘0’);
const m = String(minutes % 60).padStart(2, ‘0’);
return `${h}:${m}`;
}
formatTime(485); // → “08:05”
Pythonの例
def format_time(minutes):
h = minutes // 60
m = minutes % 60
return f”{h:02d}:{m:02d}”
format_time(485) # → “08:05”
他の定義方法とその落とし穴
| 定義方法 | メリット | デメリット |
|---|---|---|
| “08:05″(文字列) | 見た目そのまま・直感的 | 計算が面倒・ソートが不安定 |
| 805(数値) | 軽量・桁揃えしやすい | 時と分の分離が必要・演算が複雑 |
| Date型 | ライブラリで扱いやすい | 日付が不要な場合は冗長・重い |
| 分単位のint | 計算・比較・ソートが最も簡単 | 表示変換が必要(ただし簡単) |
まとめ
時刻を扱う場面は、スケジュール管理、UI表示、ログ記録、アニメーション制御など多岐にわたります。
どのような用途でも、内部は分単位の整数で統一し、
表示はフォーマット関数で柔軟に変換する方法が最も合理的です。
・計算が楽(加算・差分・比較)
・ソートが自然(数値昇順)
・表示も自在(ゼロ埋め・12/24時間表記・ローカライズ)
昔の工夫も興味深いですが、現在は見た目とロジックを分離する設計が主流です。
阿久梨絵でした。
