こんにちは! プログラマーのakiraです。
みなさんは、
・ datetimeでフォーマットの指定方法がわからない!
・ 「日付→文字列」の変換時にフォーマットを指定したい!
と思っている方もいるのではないでしょうか?
本記事では、datetimeモジュールとはから、日付⇆文字列の変換方法、フォーマットの指定方法まで解説していますので、是非参考にしてください!
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
datetimeモジュールとは
datetimeモジュールとは、日付や時間データを簡単に操作できるようにするモジュールです。
例えば、「今から30日後の曜日」を調べたい時などもdatetimeモジュールを使うと簡単に調べることができます。
datetimeモジュールの基礎から学習したい方は、こちらの記事にも掲載されていますので確認してみてください。
datetimeの使い方 基本
現在日時を取得してみよう!
それでは、datetimeモジュールを使用して現在の日時を取得してみましょう!!
日時の取得は、datetimeモジュールのdatetimeクラスで行うことができます。
import datetime now = datetime.datetime.now() print(now)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
2018-08-27 02:23:01.914614
日付の計算をしてみよう!
それでは先程datetimeの例で紹介しました「今から30日後」を計算して求めてみましょう!
日にちの足し算や引き算は、timedeltaを使用します。
timedeltaは引数に、日にちや時間、分などを与えることにより、二つの日付や時刻間の差を表すことができます。
以下のサンプルコードでは、引数にdays=30を渡して、現在日時との足し算に使用しています。
import datetime from datetime import timedelta now = datetime.datetime.now() aft_30days = now + timedelta(days=30) print("今") print(now) print('-'*30) print("30日後") print(aft_30days)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
今 2018-08-27 02:33:43.487057 ------------------------------ 30日後 2018-09-26 02:33:43.487057
日付のフォーマット指定方法
ここではPythonの日付フォーマットの指定方法について解説していきます!
例として、以下の出力結果を確認してみてください!
こちらは先程、現在日時を取得してみよう!で得られた現在日時となります。
実行結果
「2018-08-27 02:23:01.914614」
上記の結果は、「何年-何月-何日 何時:何分:何秒.マイクロ秒」のような形で出力されているのがわかるかと思います。
例えば、上記の結果から
・「何年-何月-何日」を取り出したい!
→「%Y-%m-%d」を使用する
・「何時:何分:何秒」を取り出したい!
→「%H:%M:%S」を使用する
このように頭に%をつけて、Pythonの書式文字列を使用することにより、フォーマットを指定して日付の処理を行うことができます。
次回以降、より具体的な日付操作を確認していきましょう!!!
詳しいPythonの書式文字列については、公式サイトの一覧で確認することができます。
formatメソッドを使用してフォーマットを指定する!
次は、formatメソッドでフォーマットを指定する方法を確認していきます!!
formatメソッドは、{}の中にformatの引数に指定した変数の何番目を出力するかを指定することができます。
formatメソッドについての詳細は以下に解説されていますので確認してください。
日時を日付に変換してみよう!
それでは、formatメソッドを使用して、日時を日付に変換してみましょう!!
変数nowに格納された現在日時を「{0}」で指定して、出力形式を「%Y/%m/%d」と指定することで日付の文字列としてnow_ymdに格納しています。
import datetime now = datetime.datetime.now() now_ymd = "{0:%Y/%m/%d}".format(now) print(type(now)) print(now) print('-'*30) print(type(now_ymd)) print(now_ymd)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
<class 'datetime.datetime'> 2018-08-27 03:41:14.898471 ------------------------------ <class 'str'> 2018/08/27
日時を時間に変換してみよう!
次は、日時から時間部分を取り出して出力してみましょう!!
やっている操作は同じで、「%H:%M:%S」を指定することによって時間部分のみを取り出すことができます。
import datetime now = datetime.datetime.now() now_hms = "{0:%H:%M:%S}".format(now) print(type(now)) print(now) print('-'*30) print(type(now_hms)) print(now_hms)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
<class 'datetime.datetime'> 2018-08-27 03:43:32.825981 ------------------------------ <class 'str'> 03:43:32
日時を曜日に変換してみよう!
次は、曜日を出力してみます!!!
こちらは、「%A」を指定することによって、曜日を取り出すことができます。
デフォルトだと曜日が英語で出力されますので、ロケール(言語や地域などの情報を指定できるもの)を日本に指定してから出力すると、ちゃんと日本語で曜日が出力されることがわかるかと思います。
import datetime import locale now = datetime.datetime.now() now_a = "{0:%A}".format(now) print(now_a) print('-'*30) # 曜日を日本語にする方法 locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8') now_a = "{0:%A}".format(now) print(now_a)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
Monday ------------------------------ 月曜日
「日付→文字列」の型変換時にフォーマットを指定する!
次は、「日付→文字列」の型変換の際にフォーマットを指定して変換する方法をご紹介していきます!!
「日付→文字列」の型変換は、strftimeメソッドを使用します!!
strftimeメソッドは、引数に文字列として変換したいフォーマットを指定することで文字列に変換することができます!
「日付⇆文字列」の型変換の詳細は以下の記事でも詳しく紹介されていますので確認してください。
日時を日付に変換してみよう!
nowで取得した現在の日時をstrftime(変換したい書式)として日付の文字列へ変換することができます!
基本的なやり方は、今まで学習した方法と大きく変わらないので、すぐに習得できるかと思います!!
import datetime now = datetime.datetime.now() str_now = now.strftime('%Y/%m/%d') print(str_now)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
2018/08/27
日時を時間に変換してみよう!
こちらは、変換したい書式に「%H:%M:%S」を指定して、時間の部分を取得しています。
import datetime now = datetime.datetime.now() str_now = now.strftime('%H:%M:%S') print(str_now)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
03:52:41
日時を曜日に変換してみよう!
変換したい書式に「%A」を指定して、曜日の部分を取得しています。
先程説明したロケールを指定して、曜日の出力を日本語にしています!!
import datetime import locale now = datetime.datetime.now() now_a = now.strftime('%A') print(now_a) print('-'*30) # 曜日を日本語にする方法 locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8') now_a = now.strftime('%A') print(now_a)
実行結果
※実行結果は、コードを実行した日時や環境により変わります。
Monday ------------------------------ 月曜日
まとめ
いかがでしたでしょうか。
今回は、Pythonでdatetimeモジュールを使用したフォーマットの指定方法について学習しました!
日付や日時の計算は一から実装すると、とても複雑でミスがでやすいところでもあります。
そのためPythonで日付や日時の計算をするときは、是非datetimeモジュールを使って、より簡単に、より確実にプログラミングをしましょう!
今回紹介したフォーマットの指定方法もしっかりマスターして、Pythonの日付処理を完璧にしちゃいましょう!!!!