【Python入門】datetimeモジュールのformat指定方法 徹底解説

こんにちは! プログラマーの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の日付処理を完璧にしちゃいましょう!!!!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次