高校物理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 の pendulum でタイムゾーン対応の日時処理を簡潔に書く

pendulum は Python の日時処理をモダンに書き直したライブラリです。タイムゾーン対応がデフォルトで組み込まれており、直感的な API で日時操作ができます。

インストール

pip でインストールできます。

pip install pendulum

基本的な使い方

pendulum の日時オブジェクトは標準の datetime を継承しているため、既存のコードとも互換性があります。

import pendulum

# 現在時刻(タイムゾーン付き)
now = pendulum.now()
print(now)  # 2025-01-15T14:30:00+09:00

# UTC で取得
utc_now = pendulum.now("UTC")
print(utc_now)

# 特定の日時を作成
dt = pendulum.datetime(2025, 1, 15, 10, 30, tz="Asia/Tokyo")
print(dt)

標準の datetime.now() と違い、常にタイムゾーン情報を持った aware な日時オブジェクトが返ります。

タイムゾーン変換

タイムゾーンの変換が非常に簡単です。

import pendulum

# 東京時間
tokyo = pendulum.now("Asia/Tokyo")
print(f"東京: {tokyo}")

# ニューヨーク時間に変換
new_york = tokyo.in_timezone("America/New_York")
print(f"NY: {new_york}")

# UTC に変換
utc = tokyo.in_timezone("UTC")
print(f"UTC: {utc}")

in_timezone() メソッドで直感的に変換できます。

日時の加減算

add()subtract() で日時の加減算を行います。

import pendulum

now = pendulum.now()

# 3日後
print(now.add(days=3))

# 2ヶ月前
print(now.subtract(months=2))

# 1年3ヶ月後
print(now.add(years=1, months=3))

標準の timedelta では扱えない月や年も、pendulum なら自然に書けます。月末の処理も自動で調整されるため、31日の1ヶ月後が存在しない日になる心配もありません。

人間が読みやすい差分表示

diff_for_humans() は差分を自然言語で表示してくれます。

import pendulum

now = pendulum.now()
past = now.subtract(hours=2, minutes=30)

print(past.diff_for_humans())  # "2 hours ago"

# 日本語で表示
pendulum.set_locale("ja")
print(past.diff_for_humans())  # "2時間前"

「○分前」「○日後」といった表示が必要な UI で重宝します。

期間の操作

period() を使うと、2つの日時間の期間を扱えます。

import pendulum

start = pendulum.datetime(2025, 1, 1)
end = pendulum.datetime(2025, 12, 31)

period = pendulum.period(start, end)

print(f"期間: {period.in_days()}日")
print(f"期間: {period.in_months()}ヶ月")

期間内の日付をイテレートすることもできます。

import pendulum

start = pendulum.datetime(2025, 1, 1)
end = pendulum.datetime(2025, 1, 5)

for dt in pendulum.period(start, end):
    print(dt.to_date_string())

フォーマットとパース

フォーマットは format() メソッド、パースは parse() 関数を使います。

import pendulum

dt = pendulum.now()

# フォーマット
print(dt.format("YYYY年MM月DD日 HH:mm"))  # 2025年01月15日 14:30

# パース(自動認識)
parsed = pendulum.parse("2025-01-15T10:30:00")
print(parsed)

# タイムゾーン指定でパース
parsed = pendulum.parse("2025-01-15 10:30:00", tz="Asia/Tokyo")
print(parsed)

datetime との互換性

pendulum のオブジェクトは datetime を継承しているため、既存の関数にそのまま渡せます。

import pendulum
from datetime import datetime

def legacy_function(dt: datetime):
    return dt.strftime("%Y-%m-%d")

p = pendulum.now()
print(legacy_function(p))  # 問題なく動作

pendulum vs dateutil

どちらを選ぶかは好みとプロジェクトの要件次第です。

dateutil

標準ライブラリの拡張。軽量で依存が少ない。

pendulum

日時処理を再設計。API が統一されていて学習しやすい。

タイムゾーン対応を重視するプロジェクトや、チーム全体で統一した書き方を採用したい場合は pendulum がおすすめです。一方、既存プロジェクトへの追加や軽量さを重視するなら dateutil のほうが適しているかもしれません。