【Python】datetimeから時間だけ取得する方法

【Python】datetimeから時間だけ取得する方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Pythonで日時データから時間だけの情報を取得したい場面は、データ分析や定例処理などのスケジュール管理で頻繁に発生します。時間情報の取得でよく使われるのが「datetimeモジュール」で、日付情報を取り除いて時刻のみを抽出する処理も簡単です。

この記事では、Python環境において日時のデータから時間部分だけを切り出す基本的な使い方を解説していきます。文字列への変換やPandasを用いた一括処理など、サンプルコード付きで解説していますので、ぜひ参考にしてください。



Pythonのdatetimeから時間だけ取得する方法

Pythonのdatetimeモジュールには、日時データから時刻部分のみを取り出すための手段が複数用意されています。目的に応じて使い分けることによって、時刻データの取得や変換を効率的に行えます。

時間だけを取得する具体的な方法は、以下の4つです。

  1. timeメソッドでオブジェクトとして抽出する
  2. strftimeメソッドで文字列として出力する
  3. Pandasのdt.timeで一括変換する
  4. datetimeのマイクロ秒部分を切り捨てる

それぞれオブジェクト型での保持や文字列変換、大量データの一括処理など特徴が異なるため、扱うデータの規模や後続処理に応じて適切な手法を選択してください。

timeメソッドでオブジェクトとして抽出する

Pythonの標準ライブラリであるdatetimeモジュールを使用すると、日時データから時刻部分のみを抽出可能です。取得した日時オブジェクトに対して、time()メソッドを呼び出して変換します。

公式ドキュメントでは、このメソッドの挙動を次のように説明しています。

同じhour、minute、second、microsecond 及び foldを持つ time オブジェクトを返します。 tzinfo は None です。

出典:Python公式ドキュメント datetime.datetime.time

この仕様はnaive datetime(タイムゾーン情報を持たないオブジェクト)とaware datetime(タイムゾーン情報を持つオブジェクト)の両方に共通しており、time()メソッドは常にtzinfo=Nonedatetime.timeオブジェクトを返します。タイムゾーン情報を含めたまま時刻を抽出したい場合は、代わりにtimetz()メソッドを使用してください。

以下のコードは、現在の日時を取得し、そこから時刻のみを抽出する例です。

import datetime

now = datetime.datetime.now()
time_only = now.time()

print(time_only)
print(type(time_only))

上記のコードでは、datetime.now()で取得した値からtime()メソッドで時刻のみを取り出しています。出力結果はdatetime.timeとなり、時間のみを管理したい場合に便利です。

時刻情報のみを保持することによって、日跨ぎのスケジュール計算や時間の比較が容易です。営業時間の判定やシフト管理など、日付を問わず時刻だけで比較したい場面で活用できます。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

strftimeメソッドで文字列として出力する

日時データから時間を抽出し、任意のフォーマットの文字列として出力したい場合は、strftime()メソッドを使用します。このメソッドを使うと、「時:分:秒」のような任意の形式で時間を表現可能です。

strftimeメソッドを用いた文字列出力の使い方は、以下の通りです。

import datetime

now = datetime.datetime.now()
time_str = now.strftime('%H:%M:%S')

print(time_str)
print(type(time_str))

上記のコードでは、フォーマット指定子である%H(時)、%M(分)、%S(秒)を用いて、時刻部分のみの文字列を生成しています。出力される値の型はstr型です。

ログの出力や画面表示など、プログラム内部の処理ではなく人間が読むためのデータとして扱う際に適しています。

Pandasのdt.timeで一括変換する

データ分析でよく用いられるpandas.Series.dt.timeでは、列全体の日時データから時刻のみを一括で抽出できます。データフレーム内のdatetime64型の列に対して、dt.timeアクセサを利用するという仕組みです。

なお、.dtアクセサはdatetime64型のSeriesにのみ使用できるため、事前にpd.to_datetime()で変換済みの列に対して呼び出す必要があります。

Pandasを用いた時刻データ抽出の使い方は、以下の通りです。

import pandas as pd

date_series = pd.Series(pd.to_datetime(['2023-10-01 12:30:00', '2023-10-02 15:45:00']))
time_series = date_series.dt.time

print(time_series)

上記のコードでは、pd.to_datetime()で変換した日時データに対し、.dt.timeを適用して時刻部分のみを持つSeriesを生成しています。ループ処理を使わずに複数のデータを一度に変換できるのが特徴です。

大量のデータを扱う分析業務においては、この手法によってコードをシンプルに保ちながら一括処理が可能となります。ただし、.dt.timeの戻り値はPythonのdatetime.timeオブジェクトを要素とするSeriesとなるため、その後のNumPyベースのベクトル演算には多くの場合扱いにくい点に留意してください。

datetimeのマイクロ秒部分を切り捨てる

datetime.now()などで現在時刻を取得すると、デフォルトではマイクロ秒(1秒の100万分の1)まで含まれます。マイクロ秒はミリ秒(1秒の1000分の1)とは別の単位であり、標準のdatetimeモジュールはマイクロ秒単位まで対応しています。

なお、datetimeモジュールにmillisecond引数は存在せず、サブ秒精度はmicrosecondのみで指定する仕様です。用途によってはこのマイクロ秒部分が不要となるため、replace()メソッドを使ってゼロに置き換える操作が有効です。

時刻オブジェクトとしてマイクロ秒部分を切り捨てる使い方は、以下の通りです。

import datetime

now = datetime.datetime.now()
time_without_us = now.time().replace(microsecond=0)

print(now.time())
print(time_without_us)

上記のコードでは、time()で時刻オブジェクトを取り出した後、replace(microsecond=0)を呼び出すことでマイクロ秒をゼロにしたdatetime.time型のオブジェクトを生成しています。元のオブジェクト自体は変更されない仕様です。

データベースへの保存やAPIの連携など、秒単位までの精度しか受け付けないシステムにデータを渡す際によく利用されます。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

Pythonのdatetimeの時間だけ取得に関するよくある質問

任意の時間だけを持ったオブジェクトを生成できますか?

はい、datetime.timeクラスを使用するか、既存の日時データからtime()メソッドで抽出して生成可能です。datetime.time(12, 30, 0)のように引数に時・分・秒を直接指定することによって、日付情報を持たない任意の時刻オブジェクトを新規に作成できます。

25時のような深夜帯の時刻を変換できますか?

標準のdatetimeモジュールは0〜23時の24時間制のみを扱うため、「25時」のような表記を直接パースすることはできません。実務ではtimedeltaを使って基準日時に時間を加算し、24時間を超えた部分を日数として繰り上げる方法が一般的です。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する