高校物理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 で2つの日付を比較して大小や期間内かを判定する

datetime オブジェクトは比較演算子で大小関係を判定できます。期限チェックや期間内判定など、実務で頻出するパターンを見ていきましょう。

基本の比較演算

datetime 同士は <>== などの演算子で比較できます。

from datetime import datetime

dt1 = datetime(2025, 1, 15, 10, 0, 0)
dt2 = datetime(2025, 1, 20, 10, 0, 0)

print(dt1 < dt2)   # True(dt1 のほうが過去)
print(dt1 > dt2)   # False
print(dt1 == dt2)  # False
print(dt1 != dt2)  # True

時系列で前にあるほうが「小さい」と判定されます。直感的に使えるので便利ですね。

現在時刻との比較

期限切れかどうかを判定する例です。

from datetime import datetime

deadline = datetime(2025, 1, 31, 23, 59, 59)
now = datetime.now()

if now > deadline:
    print("期限切れです")
else:
    print("まだ期限内です")

deadline に期限を設定し、現在時刻と比較するだけでチェックできます。

期間内かを判定する

開始日と終了日の間に含まれるかどうかを判定してみます。

from datetime import datetime

start = datetime(2025, 1, 1)
end = datetime(2025, 1, 31)
target = datetime(2025, 1, 15)

if start <= target <= end:
    print("期間内です")
else:
    print("期間外です")

Python では start <= target <= end のようにチェーン比較が書けるため、数学的な表記に近い形で範囲判定ができます。

date オブジェクトの比較

日付だけを比較したい場合は date オブジェクトを使います。

from datetime import date

date1 = date(2025, 1, 15)
date2 = date(2025, 1, 20)

print(date1 < date2)  # True

datetimedate() メソッドで日付部分だけを取り出して比較することもできます。

from datetime import datetime

dt1 = datetime(2025, 1, 15, 10, 30, 0)
dt2 = datetime(2025, 1, 15, 18, 0, 0)

# datetime 同士は時刻も含めて比較される
print(dt1 == dt2)  # False

# 日付部分だけを比較
print(dt1.date() == dt2.date())  # True

「同じ日かどうか」を判定したいときに使えるテクニックです。

タイムゾーンに注意

タイムゾーン情報を持つ datetime(aware)と持たない datetime(naive)は比較できません。

from datetime import datetime, timezone

dt_naive = datetime(2025, 1, 15, 10, 0, 0)
dt_aware = datetime(2025, 1, 15, 10, 0, 0, tzinfo=timezone.utc)

# これはエラーになる
# print(dt_naive < dt_aware)  # TypeError

比較する際は、両方とも naive にするか、両方とも aware にするかを統一してください。

from datetime import datetime, timezone

dt1 = datetime(2025, 1, 15, 10, 0, 0, tzinfo=timezone.utc)
dt2 = datetime(2025, 1, 15, 19, 0, 0, tzinfo=timezone(timedelta(hours=9)))

# JST の 19:00 は UTC の 10:00 なので等しい
print(dt1 == dt2)  # True

タイムゾーン付きの比較では、内部的に UTC に変換されてから比較が行われます。異なるタイムゾーンでも正しく比較できるのは便利ですが、混在に気をつけましょう。