日付や時刻を扱うにはdatetimeモジュールを使用します。
システムやさまざまなアプリケーションでは日付を扱うことが多く、Pythonでももちろん日付を取得するためのdatetimeモジュールがあります。
日付同士を計算する方法が知りたい
日付を指定したフォーマットで取得する方法が知りたい
そこで今回はPythonで日付や時間を扱う時に必要なdatetimeモジュールについての解説をしていきます。
日付や時間を扱う場面は多いので、基本的な使い方をマスターしておいて損はありません。
この記事では、
- 【基礎】datetimeモジュールとは何か
- 【基礎】datetimeの基本的な使い方
- 【発展】datetimeの実践的な使い方について
などについて詳しく解説していきます。
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
datetimeとは
datetimeモジュールは、日付や時刻に対して色々な操作をすることが出来るモジュールです。
datetimeモジュールには、日付や時刻を扱うためのクラスが用意されています。
それらを組み合わせて活用することで、以下のような処理が可能になります。
- 現在の日時を取得する
- フォーマットを指定して取得する
- 日付を計算する
など、日付に関する処理をより簡単に行うことが出来ます。
datetimeには大きく分けて、3種類のクラスがあります。
クラス | 説明 |
---|---|
date | 主に日付を表現 |
time | 時刻を表現 |
datetime | 日付と時刻を合わせて表現 |
- dateクラスでは主に日付を表現します
- timeクラスでは時刻を表現します
- datetimeクラスでは日付と時刻を合わせて表現します
datetimeの使い方
それでは実際にdatetimeを使ってみましょう。
現在の日付や時刻を取得する方法
現在の日付や時刻を取得するには、
- datetime.date.today
- datetime.datetime.now
を使います。
datetimeを使う前に、importを忘れないようにしましょう。
import datetime
では実際に現在の日付や時刻を取得してみましょう。
#現在の日付 date1 = datetime.date.today() print(date1) #現在の日付と日時 date2 = datetime.datetime.now() print(date2)
実行結果
2018-10-31 2018-10-31 00:23:18.934519
このように取得した日付型変数にtoday()、now()を指定することで現在の日付や日付と時刻を取得することができます。
また、年月日時分秒を単体で取得したい場合は、以下のように指定します。
date = datetime.datetime.now() print("年:",date.year) print("月:",date.month) print("日:",date.day) print("時:",date.hour) print("分:",date.minute) print("秒:",date.second) print("マイクロ秒:",date.microsecond)
実行結果
年: 2018 月: 10 日: 31 時: 0 分: 23 秒: 25 マイクロ秒: 328144
このように年・月・日・時・分・秒が簡単に取得できることがわかりますね!
日付の計算をする方法
日時を扱う時、日付の足し算や引き算などの処理が必要になる場面もあると思います。
予約システムを例に考えると、現在の日付から2日後に予約を開始したい場合は、日付を計算する必要が出てきます。
datetimeのtimedeltaを使うことで、日付の足し算や引き算が出来るようになります。
このサンプルコードを見てみましょう。
today = datetime.date.today() day_after_tomorrow = datetime.timedelta(days=2) print(today+day_after_tomorrow)
実行結果
2018-11-02
このコードでは、現在から2日後の日付を表示させてみました。
2018年10月31日が現在の日にちなので、その2日後は確かに2018年11月2日ですね。
このようにtimedeltaクラスの引数として、任意の数字を渡すことで日時の計算が簡単に行えます。
また、このような日付の比較方法もあります。
こちらのサンプルコードを見てみましょう。
# today = datetime.date.today() tomorrow = today + datetime.timedelta(days=1) yestarday = today - datetime.timedelta(days=1) print("今日は明日よりも後:"+str(today>tomorrow)) print("昨日は今日よりも前:" +str(yestarday<today))
実行結果
今日は明日よりも後:False 昨日は今日よりも前:True
このサンプルコードでは、今日と昨日と明日の日付をそれぞれ作成して比較しています。
今回のコードで使用したstr関数は、引数に渡されているものを文字列型へ変換してくれるものです。
このように、「>」や「<」を使って簡単に比較することが出来ます。
日付のフォーマットを変更する方法
datetimeのdateクラスは、先ほどのサンプルコードのように「yyyy-mm-dd」というフォーマットで結果を表示しています。
しかし、システムやサービスの仕様によっては別のフォーマットで日付を表したい場合もあると思います。
そのような時は、このようにフォーマットを指定することが可能です。
today1= datetime.date.today() today2= "{0:%Y/%m/%d}".format(today1) print(today1) print(today2)
実行結果
2018-10-31 2018/10/31
このサンプルコードでは、formatメソッドを使って指定したフォーマットに任意の日時を変換させてみました。
today1はyyyy-mm-ddというフォーマットで表示されますが、変換後のtoday2はyyyy/mm/ddというフォーマットで表示されました。
formatメソッドについての詳しい解説は、こちらの記事をご覧ください。
文字列型をdatetime型に変換する方法
datetimeで得た日時の情報を、日付型として扱いたい場合と文字列型として扱いたい場合があると思います。
そのような時、文字列型・日付型への変換処理の方法を覚えておくととても便利です。
日付型→文字列型に変換
以下のサンプルでは日付型から文字列型に変換しています。
before = datetime.datetime.now() after = before.strftime('%Y/%m/%d %H:%M:%S') print(type(before)) print(type(after))
実行結果
<type 'datetime.datetime'> <type 'str'>
このサンプルコードでは、strftimeを使って現在の日時を日付型から文字列型へ変換しました。
strftimeは、引数として指定したいフォーマットを入力します。今回はyyyy-mm-dd hh:mm:ssをフォーマットとして使っています。
変換前の型はdatetimeですが変換後はstrになっていますね。
type関数では引数に渡したものの型を調べることが出来ます。type関数についての詳しい解説はこちらの記事をご覧ください。
文字列型→日付型に変換
次に文字列型の日付を日付型に変換してみましょう。
before = '2017-05-23 12:47:23' after = datetime.datetime.strptime(before, '%Y-%m-%d %H:%M:%S') print(type(before)) print(type(after))
実行結果
<type 'str'> <type 'datetime.datetime'>
このサンプルコードでは、strptimeを使って文字列から日付型への変換を行いました。
strptimeには2つの引数を渡します。
第一引数には変換したい文字列を、第二引数にはフォーマットを表す文字列を渡します。
まとめ
今回はdatetimeモジュールを使った基本的な日付や日時の扱い方について解説しました。
- datetimeモジュールとは何か
- datetimeの基本的な使い方
- datetimeの実践的な使い方について
大規模なプログラムではなくても、日付や日時を扱う場面はとても多いので覚えていて損はありません。
またformatメソッドやstr関数は日付や日時を扱う場面以外でもよく使われるので、ぜひ覚えておきましょう。
datetimeモジュールの使い方を忘れてしまったら、ぜひこの記事を見返してみてください!