高校物理160203 views
高校国語788336 views
高校化学2924392 views
雑学1473612 views
高校日本史190571 views
小学社会310485 views
英語613639 views
小学算数1200427 views
りんご209490 views
高校生物551766 views
Help
Tools
NewsSpreadsheetCalendarSlidesTier ListPen ToolIllustrationCrayonPixel ArtASCII ArtPerspectiveEndless StairsGraphMind MapER DiagramFamily TreeMemeCurved TextImage EditorMosaicRetro FilterPencil SketchOCR/HighlighterMakeup EditorFaviconVideo TrimmerScrolling VideoVideo TitleColor PickerColor ExtractorBonfireFireworksWater RippleWater SplashBreaking GlassWood GrainMarble TextureCSS ButtonIcon MakerBar ChartGrouped Bar ChartStacked Bar ChartPie ChartLine ChartArea ChartStacked Area ChartScatter Plot3D Bar Chart3D Pie ChartBar Chart RaceBubble ChartPopulation PyramidPictogramEarningsCandlestick ChartInvestment RiskMortgage SimulatorCalculatorMatrix CalculatorFunction GraphPolynomial ExpansionVenn DiagramField VisualizerRubik's Cube Group TheoryTraveling SalesmanVoronoi and DelaunayFractalColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsCross SectionsMotion PathMechanicsWavesLight and LensesThermodynamicsHow Semiconductors WorkMolecular StructuresAtomic OrbitalsElectrochemical CellsChemical EquilibriumCrystal LatticesBuffer pHComplex IonsDNA Double HelixCell DivisionMembrane ChannelsNerve ImpulseRock ClassificationWeatherConstellationsSolar and Lunar Eclipses3D ModelingFloor PlanSeismic StructuresIntersection TurnMaglevCooking AnimationOrigamiLive Viewer CountGeoJSON MapRailway MapPopulation MapCrime MapLand Price MapSchool MapShrine and Castle MapHouse of Representatives MapWord MapSolitaireReversiHakoiri MusumeChessHamburgerRippleSlide Puzzle MakerNeon PinballNovel MakerJapanese Typing PracticePiano Score EditorMusic Theory

English

Python の timedelta で時間の差分を秒・分・時間に変換する

2つの datetime を引き算すると timedelta が得られます。この timedelta から「何秒差か」「何分差か」を取り出す方法を解説します。

timedelta の内部構造

timedelta は内部的に3つの属性だけで時間の長さを保持しています。

days日数(整数)
seconds秒数(0〜86399)
microsecondsマイクロ秒(0〜999999)

たとえば「1日と2時間30分」という timedelta は、days=1seconds=9000(2時間30分 = 9000秒)として格納されます。hoursminutes という属性は存在しないため、自分で計算する必要があるのです。

総秒数を取得する

total_seconds() メソッドを使うと、timedelta 全体を秒数に換算した値が得られます。

from datetime import datetime

start = datetime(2025, 1, 1, 10, 0, 0)
end = datetime(2025, 1, 1, 12, 30, 0)

delta = end - start
print(f"差分: {delta}")
print(f"総秒数: {delta.total_seconds()}")

出力は 9000.0 となります。2時間30分 = 150分 = 9000秒 ですね。この total_seconds() を起点に、分や時間への変換を行います。

分に変換する

総秒数を60で割れば分になります。

from datetime import datetime

start = datetime(2025, 1, 1, 10, 0, 0)
end = datetime(2025, 1, 1, 12, 30, 0)

delta = end - start
total_minutes = delta.total_seconds() / 60

print(f"総分数: {total_minutes}")  # 150.0

整数が欲しい場合は int() で変換するか、// 演算子で切り捨て除算を行います。

時間に変換する

総秒数を3600で割れば時間になります。

from datetime import datetime

start = datetime(2025, 1, 1, 10, 0, 0)
end = datetime(2025, 1, 3, 14, 30, 0)

delta = end - start
total_hours = delta.total_seconds() / 3600

print(f"差分: {delta}")
print(f"総時間: {total_hours}")  # 52.5

2日と4時間30分の差なので、48 + 4.5 = 52.5時間という結果になります。

時・分・秒に分解する

「○時間○分○秒」という形式で表示したい場合は、商と余りを使って分解します。

from datetime import datetime

start = datetime(2025, 1, 1, 10, 0, 0)
end = datetime(2025, 1, 1, 12, 34, 56)

delta = end - start
total_seconds = int(delta.total_seconds())

hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60

print(f"{hours}時間{minutes}{seconds}秒")  # 2時間34分56秒

divmod() を使うともう少し簡潔に書けます。

from datetime import datetime

start = datetime(2025, 1, 1, 10, 0, 0)
end = datetime(2025, 1, 1, 12, 34, 56)

delta = end - start
total_seconds = int(delta.total_seconds())

hours, remainder = divmod(total_seconds, 3600)
minutes, seconds = divmod(remainder, 60)

print(f"{hours}時間{minutes}{seconds}秒")

経過時間の表示や作業時間の集計など、実務でよく使うパターンなので覚えておくと便利です。