高校物理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 で文字列を datetime に変換する strptime の使い方

ログファイルや CSV、API のレスポンスなど、日時が文字列で渡されることは多いです。Python で文字列を datetime オブジェクトに変換するには strptime() を使います。

strptime の基本

strptime() は「string parse time」の略で、文字列を解析して datetime オブジェクトを生成します。

from datetime import datetime

date_string = "2025-01-15 10:30:00"
dt = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")

print(dt)         # 2025-01-15 10:30:00
print(type(dt))   # <class 'datetime.datetime'>

第1引数に変換したい文字列、第2引数に書式を指定します。書式が文字列と一致しないとエラーになるので、正確に合わせる必要があります。

よく使う書式指定子

書式指定子は strftime() と共通です。主要なものを覚えておきましょう。

指定子意味
%Y4桁の年2025
%m2桁の月01〜12
%d2桁の日01〜31

時刻関連の指定子も見ておきます。

指定子意味
%H24時間表記の時00〜23
%M00〜59
%S00〜59

さまざまな形式に対応する

実際のデータはさまざまな形式で渡されます。いくつかのパターンを見てみましょう。

from datetime import datetime

# スラッシュ区切り
s1 = "2025/01/15"
dt1 = datetime.strptime(s1, "%Y/%m/%d")
print(dt1)

# 日本語表記
s2 = "2025年1月15日"
dt2 = datetime.strptime(s2, "%Y年%m月%d日")
print(dt2)

# 時刻付き(T区切り)
s3 = "2025-01-15T10:30:00"
dt3 = datetime.strptime(s3, "%Y-%m-%dT%H:%M:%S")
print(dt3)

書式文字列は、日時以外の部分(区切り文字や固定テキスト)もそのまま記述します。

0埋めされていない場合

月や日が0埋めされていない形式もあります。

from datetime import datetime

# 0埋めなし
s = "2025-1-5"
dt = datetime.strptime(s, "%Y-%m-%d")
print(dt)  # 2025-01-05 00:00:00

%m%d は0埋めなしの数字も受け付けます。ただし出力側の strftime() では常に0埋めされるため、この違いに注意してください。

エラーハンドリング

書式が一致しない場合は ValueError が発生します。ユーザー入力を扱う場合は例外処理を入れておくのが安全です。

from datetime import datetime

def parse_date(s):
    try:
        return datetime.strptime(s, "%Y-%m-%d")
    except ValueError:
        return None

result = parse_date("2025-01-15")
print(result)  # 2025-01-15 00:00:00

result = parse_date("invalid")
print(result)  # None

複数の形式を試したい場合は、リストでループさせる方法もあります。

from datetime import datetime

def parse_date_flexible(s):
    formats = ["%Y-%m-%d", "%Y/%m/%d", "%d-%m-%Y"]
    for fmt in formats:
        try:
            return datetime.strptime(s, fmt)
        except ValueError:
            continue
    return None

print(parse_date_flexible("2025-01-15"))
print(parse_date_flexible("15-01-2025"))

外部データを扱う際は、想定外の形式が混入することもあるため、柔軟なパース処理を用意しておくと安心です。