スライドショースライドショー

【Python入門】datetimeで日付や時刻を扱う方法を解説!

日付や時刻を扱うにはdatetimeモジュールを使用します。

システムやさまざまなアプリケーションでは日付を扱うことが多く、Pythonでももちろん日付を取得するためのdatetimeモジュールがあります。

dateteimeで日時を取得する方法が知りたい
日付同士を計算する方法が知りたい
日付を指定したフォーマットで取得する方法が知りたい

そこで今回はPythonで日付や時間を扱う時に必要なdatetimeモジュールについての解説をしていきます。

日付や時間を扱う場面は多いので、基本的な使い方をマスターしておいて損はありません。

この記事では、

  • 【基礎】datetimeモジュールとは何か
  • 【基礎】datetimeの基本的な使い方
  • 【発展】datetimeの実践的な使い方について

などについて詳しく解説していきます。

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

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メソッドについての詳しい解説は、こちらの記事をご覧ください。

【Python 入門】formatメソッドで変数の内容を出力する方法
更新日 : 2019年6月21日

文字列型を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関数についての詳しい解説はこちらの記事をご覧ください。

Pythonで型を確認するには?type・isinstance関数について解説
更新日 : 2019年8月6日

文字列型→日付型に変換

次に文字列型の日付を日付型に変換してみましょう。

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モジュールの使い方を忘れてしまったら、ぜひこの記事を見返してみてください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Kotono

Kotono

イタリア在住15年目の22歳です。イタリアの大学で情報科学&応用数学を学んでいます。主にJavaScriptやPythonについての記事を書いたりしています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説