【Python】日時(datetime)を年月日などの形式でフォーマットする方法

Pythonのdatetimeモジュールは日付や時刻を扱うための便利な機能を提供しています。

この記事では、datetimeオブジェクトの生成方法や、format関数を使って任意の形式の文字列に変換する方法を解説します。

目次から探す

datetimeオブジェクトの生成

Pythonで日時を扱うには、datetimeモジュールを使用します。

datetimeモジュールには、日時を表すdatetimeオブジェクトを生成するためのいくつかの方法があります。

現在の日時を取得する

現在の日時を取得するには、datetimeモジュールの datetime.now() 関数を使用します。

この関数は、現在の日時を表すdatetimeオブジェクトを返します。


from datetime import datetime
# 現在の日時を取得
now = datetime.now()
print(now)
2022-01-01 12:34:56.789012

指定した日時を生成する

特定の日時を表すdatetimeオブジェクトを生成するには、datetimeクラスのコンストラクタを使用します。

コンストラクタには、年、月、日、時、分、秒、マイクロ秒を引数として渡すことができます。


from datetime import datetime
# 指定した日時を生成
dt = datetime(2022, 1, 1, 12, 34, 56)
print(dt)
2022-01-01 12:34:56

文字列からdatetimeオブジェクトを生成する

日時を表す文字列からdatetimeオブジェクトを生成するには、 datetime.strptime() 関数を使用します。

この関数は、文字列と日時の書式を表すフォーマット文字列を引数として受け取り、対応するdatetimeオブジェクトを返します。


from datetime import datetime
# 文字列からdatetimeオブジェクトを生成
dt_str = '2022-01-01 12:34:56'
dt = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')
print(dt)
2022-01-01 12:34:56

strptime() 関数で使用するフォーマット文字列には、以下のような指定ができます。

  • %Y: 4桁の年
  • %m: 2桁の月
  • %d: 2桁の日
  • %H: 2桁の時 (24時間表記)
  • %M: 2桁の分
  • %S: 2桁の秒

これらのフォーマット文字列を組み合わせて、日時の書式に合わせた文字列を解析することができます。

format関数の基本

format関数とは

format関数は、Pythonの組み込み関数で、文字列の中に変数や値を埋め込むことができます。

特に、日付や時刻を扱う際には、datetimeオブジェクトを任意の形式の文字列に変換するのに役立ちます。

この記事では、format関数を使ってdatetimeオブジェクトを様々な形式の文字列に変換する方法を解説します。

format関数の基本的な使い方

format関数の基本的な使い方は以下の通りです。


"文字列{変数名}".format(変数名=値)

ここで、{変数名}は、文字列の中に埋め込む値を指定するプレースホルダーです。

format関数の引数で、変数名=値の形式で値を指定します。

例えば、次のように書くことができます。


name = "山田"
age = 30
text = "私の名前は{name}で、年齢は{age}歳です。".format(name=name, age=age)
print(text)
私の名前は山田で、年齢は30歳です。

datetimeオブジェクトを任意の形式の文字列に変換する場合は、次のように書きます。


from datetime import datetime
now = datetime.now()
formatted_now = "現在の日時は{year}年{month}月{day}日 {hour}時{minute}分{second}秒です。".format(
    year=now.year,
    month=now.month,
    day=now.day,
    hour=now.hour,
    minute=now.minute,
    second=now.second
)
print(formatted_now)
現在の日時は2022年7月30日 15時30分45秒です。

このように、format関数を使ってdatetimeオブジェクトを任意の形式の文字列に変換することができます。

次のセクションでは、さらに詳細なフォーマット指定を行う方法を解説します。

format関数で使用できる書式指定子

format関数を使って、datetimeオブジェクトを任意の形式の文字列に変換する際に使用できる書式指定子について解説します。

書式指定子は、年・月・日、時・分・秒、曜日・週・日付、タイムゾーンの情報を表現するためのものです。

年・月・日の書式指定子

年・月・日に関する書式指定子は以下の通りです。

  • %Y: 4桁の年(例: 2021)
  • %y: 2桁の年(例: 21)
  • %m: 2桁の月(例: 07)
  • %d: 2桁の日(例: 31)

例えば、以下のコードでは、現在の日付を「YYYY年MM月DD日」の形式で表示しています。


from datetime import datetime
now = datetime.now()
formatted_date = now.strftime("%Y/%m/%d")
print(formatted_date)
2021/07/31

時・分・秒の書式指定子

時・分・秒に関する書式指定子は以下の通りです。

  • %H: 24時間制の2桁の時(例: 23)
  • %I: 12時間制の2桁の時(例: 11)
  • %M: 2桁の分(例: 59)
  • %S: 2桁の秒(例: 59)

例えば、以下のコードでは、現在の時刻を「HH時MM分SS秒」の形式で表示しています。


from datetime import datetime
now = datetime.now()
formatted_time = now.strftime("%H:%M:%S")
print(formatted_time)
23:59:59

曜日・週・日付の書式指定子

曜日・週・日付に関する書式指定子は以下の通りです。

  • %A: 曜日の名前(例: Monday)
  • %a: 曜日の短縮名(例: Mon)
  • %w: 曜日の番号(0: 日曜日, 1: 月曜日, …, 6: 土曜日)
  • %U: 週番号(日曜日を週の始まりとする)
  • %W: 週番号(月曜日を週の始まりとする)
  • %j: 1月1日からの日数(例: 365)

例えば、以下のコードでは、現在の曜日と週番号を表示しています。


from datetime import datetime
now = datetime.now()
formatted_week = now.strftime("%A(%a), 週番号: %U")
print(formatted_week)
Saturday(Sat), 週番号: 30

タイムゾーンの書式指定子

タイムゾーンに関する書式指定子は以下の通りです。

  • %Z: タイムゾーンの名前(例: UTC)
  • %z: タイムゾーンのオフセット(例: +0900)

例えば、以下のコードでは、現在のタイムゾーン情報を表示しています。


from datetime import datetime
now = datetime.now()
formatted_timezone = now.strftime("タイムゾーン: %Z, オフセット: %z")
print(formatted_timezone)
タイムゾーン: JST, オフセット: +0900

これらの書式指定子を組み合わせることで、任意の形式の日時文字列を作成することができます。

例えば、以下のコードでは、現在の日時を「YYYY年MM月DD日(曜日)HH時MM分SS秒」の形式で表示しています。


from datetime import datetime
now = datetime.now()
formatted_datetime = now.strftime("%Y/%m/%d(%a)%H:%M:%S")
print(formatted_datetime)
2021/07/31(Sat)23:59:59
1 2 3

目次から探す