Python Datetime モジュール

Datetime モジュールを使用すると、日付と時刻のオブジェクトを扱うことができます。これは、datetimedatetime の 3 つの追加データ型を提供します。

import datetime

date()

datetime.date(year: int, month: int, day: int)

date メソッドは、yearmonthday 属性を持つ date オブジェクトを返します。

from datetime import date
# date オブジェクトを作成
obj = date(2022, 12, 1)
# year 属性にアクセス
obj.year
2022
obj.month
12
obj.day
1

time()

datetime.time(hour: int, minute: int, second: int)

time メソッドは、hourminutesecondmicrosecondtzinfo 属性を持つ time オブジェクトを返します。

from datetime import time
# time オブジェクトを作成
obj = time(10, 20, 33)
# hour 属性にアクセス
obj.hour
10
obj.second
33
obj.microsecond
0

datetime()

datetime.datetime(year, month, day, hour, minute, second)

datetime は、date オブジェクトと time オブジェクトの両方の属性を持つオブジェクトを返します。

from datetime import datetime
# 日付と時刻を持つ datetime オブジェクトを作成
obj = datetime(2024, 12, 1, 15, 35, 59)
# year 属性にアクセス
obj.year
2024
obj.month
12
obj.day
1
obj.hour
15
obj.second
59

now() および today()

now および today メソッドは、システムの正確な日時を持つ datetime オブジェクトを返します。

from datetime import datetime
# 現在の日付と時刻を取得
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 19, 56, 49, 589806)

返されるオブジェクトは datetime であるため、date 属性と time 属性の両方にアクセスできます。

now.date()
datetime.date(2022, 7, 23)
now.time()
datetime.time(19, 56, 49, 589806)
now.year
2022
now.month
7
now.day
23
now.hour
19
now.minute
56
now.second
49
now.microsecond
589806

さらに、now はオプションのパラメーターとして タイムゾーン オブジェクトを受け取ることができます。

from datetime import datetime, timezone
# 現在の UTC 時刻を取得
datetime.now(timezone.utc)
datetime.datetime(2022, 7, 24, 0, 20, 8, 265634, tzinfo=datetime.timezone.utc)

timezone パラメーターが指定されていない場合、now はシステムのタイムゾーンをデフォルトとします。

strftime() および strptime()

strftime メソッドと strptime メソッドを使用すると、文字列と datetime オブジェクトの間を簡単に変換できます。

strftime()

strftime を使用すると、Python の datetime オブジェクトから人間が読みやすい形式の文字列を作成できます。

from datetime import datetime
# フォーマットの例のために現在の datetime を取得
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 20, 31, 19, 751479)
# datetime を日 - 月 (省略形)-年 の形式にフォーマット
now.strftime("%d-%b-%Y")
'23-Jul-2022'
# datetime を日 - 月 (数値)-年 の形式にフォーマット
now.strftime("%d-%m-%Y")
'23-07-2022'
# datetime を月/日/年の形式にフォーマット
now.strftime("%m/%d/%Y")
'07/23/2022'
# datetime を月/日/年 - 時:分:秒 の形式にフォーマット
now.strftime("%b/%d/%Y - %H:%M:%S")
'Jul/23/2022 - 20:31:19'

strftime に渡される文字列は少し奇妙に見えるかもしれませんが、その意味を理解するのは非常に簡単です。例えば、%m/%d/%Y は月、日、年を / で区切って返します (07/23/2022)。

strptime()

strptime メソッドは、文字列から datetime オブジェクトを作成します。

このメソッドは 2 つのパラメーターを受け取ります。

obj.strptime(datetime_string, format)
  • datetime オブジェクトを表す文字列。
  • その文字列に対応する Python のフォーマットコード。
from datetime import datetime

# 文字列を datetime オブジェクトに解析
datetime_str = '12-Jul-2023'
datetime.strptime(datetime_str, '%d-%b-%Y')
datetime.datetime(2023, 7, 12, 0, 0)
# 日付と時刻を含む文字列を解析
datetime_str = 'Jul/12/2023 - 14:38:37'
datetime.strptime(datetime_str, "%b/%d/%Y - %H:%M:%S")
datetime.datetime(2023, 7, 12, 14, 38, 37)

フォーマットコード

ディレクティブ意味
%aロケールに適した曜日の省略名。Sun, Mon, …, Sat (en_US)
%Aロケールに適した曜日の完全な名前。Sunday, Monday, …, Saturday (en_US)
%w曜日を 10 進数で表したもの(日曜日が 0、土曜日が 6)。0, 1, …, 6
%d月の日をゼロ埋めした 10 進数で表したもの。01, 02, …, 31
%bロケールに適した月の省略名。Jan, Feb, …, Dec (en_US)
%Bロケールに適した月の完全な名前。January, February, …, December (en_US)
%m月をゼロ埋めした 10 進数で表したもの。01, 02, …, 12
%y世紀なしの年をゼロ埋めした 10 進数で表したもの。00, 01, …, 99
%Y世紀を含む年を 10 進数で表したもの。0001, 0002, …, 2013, 2014, …, 9998, 9999
%H24 時間表記の時をゼロ埋めした 10 進数で表したもの。00, 01, …, 23
%I12 時間表記の時をゼロ埋めした 10 進数で表したもの。01, 02, …, 12
%pロケールに適した AM または PM の同等表現。AM, PM (en_US)
%M分をゼロ埋めした 10 進数で表したもの。00, 01, …, 59
%S秒をゼロ埋めした 10 進数で表したもの。00, 01, …, 59
%fマイクロ秒を 10 進数で表したもの(左側をゼロ埋め)。000000, 000001, …, 999999
%zUTC オフセットを ±HHMM[SS[.ffffff]] 形式で表したもの(オブジェクトが naive な場合は空文字列)。(empty), +0000, -0400, +1030, +063415, -030712.345216
%Zタイムゾーン名(オブジェクトが naive な場合は空文字列)。(empty), UTC, GMT
%jその年の何日目かをゼロ埋めした 10 進数で表したもの。001, 002, …, 366
%Uその年の週番号(日曜日を週の最初とする)をゼロ埋めした 10 進数で表したもの。新しい年の最初の日曜日の前のすべての日は週 0 と見なされます。00, 01, …, 53
%Wその年の週番号(月曜日を週の最初とする)を 10 進数で表したもの。新しい年の最初の月曜日の前のすべての日は週 0 と見なされます。00, 01, …, 53
%cロケールに適した日付と時刻の表現。Tue Aug 16 21:30:00 1988 (en_US)
%xロケールに適した日付の表現。08/16/88 (None)
%Xロケールに適した時刻の表現。21:30:00 (en_US)
%%リテラルの '%' 文字。%

timedelta()

timedelta オブジェクトは、2 つの日付または時刻の差を表します。

from datetime import datetime

# 2 つの datetime オブジェクトを作成
date_1 = datetime.strptime('12-Jul-2023', '%d-%b-%Y')
date_2 = datetime.strptime('01-Jan-2024', '%d-%b-%Y')

# 差を計算(timedelta を返す)
difference = date_2 - date_1
difference
datetime.timedelta(days=173)
# timedelta から日数を取得
difference.days
173

timedelta は、dayssecondsmicroseconds を datetime オブジェクトに加算できます。

from datetime import datetime, timedelta

# timedelta 操作のために現在の datetime を取得
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# 現在の datetime に 10 日と 15 秒を加算
now + timedelta(days=10, seconds=15)
datetime.datetime(2022, 8, 2, 21, 25, 17, 341081)

また、dayssecondsmicroseconds を datetime オブジェクトから減算することもできます。

from datetime import datetime, timedelta

# 減算の例のために現在の datetime を取得
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# 現在の datetime から 10 日と 15 秒を減算
now - timedelta(days=10, seconds=15)
datetime.datetime(2022, 7, 13, 21, 59, 41, 100883)

関連リンク

Morty Proxy This is a proxified and sanitized view of the page, visit original site.