日付と時刻の情報を指定してインスタンスを生成する

datetiem モジュールには日付や時刻を扱うクラスがいくつか定義されています。 datetime クラスは日付と時刻、 date クラスは日付、 time クラスは時刻、 timezone クラスはタイムゾーンに関する値を持ちます。ここでは日付や時刻に関する値を指定してそれぞれのクラスのインスタンスを生成する方法について解説します。

(Last modified: )

datetimeクラス

datetime クラスは日付と時刻の両方の値を扱うクラスです。コンストラクタは次のようになっています。

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

引数の意味と指定できる値の範囲は次の通りです。

year       : 年 1 <= year <= 9999
month      : 月 1 <= month <= 12
day        : 日 1 <= day <= 指定された月と年における日数
hour       : 時 0 <= hour < 24
minute     : 分 0 <= minute < 60
second     : 秒 0 <= minute < 60
microsecon : マイクロ秒 0 <= microsecond < 1000000
tzinfo     : タイムゾーン
fold       : 夏時間を考慮する場合は 1 そうでない場合は 0

引数でタイムゾーンを指定した場合だけ、インスタンスはタイムゾーンに関する情報を持ちます。(タイムゾーン情報を持つものを aware オブジェクト と呼び、タイムゾーン情報を持たないものを naive オブジェクト と呼びます)。

具体的には次のように記述します。 datetime クラスは datetime モジュールに含まれます。

import datetime

dt1 = datetime.datetime(2020, 7, 21)
print(dt1)
>> 2020-07-21 00:00:00

dt2 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551)
print(dt2)
>> 2020-07-21 06:12:30.000551

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt3 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551, tokyo_tz)
print(dt3)
>> 2020-07-21 06:12:30.000551+09:00

この場合、 1 つめと 2 つめのインスタンスは naive オブジェクト、 3 つめのインスタンスは aware オブジェクトです。

※ タイムゾーンについては「タイムゾーンのインスタンスを生成する」を参照されてください。

dateクラス

date クラスは日付の値を扱うクラスです。コンストラクタは次のようになっています。

class datetime.date(year, month, day)

引数の意味と指定できる値の範囲は次の通りです。

year       : 年 1 <= year <= 9999
month      : 月 1 <= month <= 12
day        : 日 1 <= day <= 指定された月と年における日数

具体的には次のように記述します。 date クラスは datetime モジュールに含まれます。

import datetime

d = datetime.date(2020, 7, 21)
print(d)
>> 2020-07-21

date クラスはタイムゾーンに関する情報を持たないため、常に naive オブジェクトです。

timeクラス

time クラスは時刻の値を扱うクラスです。コンストラクタは次のようになっています。

class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

引数の意味と指定できる値の範囲は次の通りです。

hour       : 時 0 <= hour < 24
minute     : 分 0 <= minute < 60
second     : 秒 0 <= minute < 60
microsecon : マイクロ秒 0 <= microsecond < 1000000
tzinfo     : タイムゾーン
fold       : 夏時間を考慮する場合は 1 そうでない場合は 0

引数でタイムゾーンを指定した場合だけ、インスタンスはタイムゾーンに関する情報を持ちます。

具体的には次のように記述します。 time クラスは datetime モジュールに含まれます。

import datetime

t1 = datetime.time(6, 12, 30, 551)
print(t1)
>> 06:12:30.000551

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
t2 = datetime.time(6, 12, 30, 551, tokyo_tz)
print(t2)
>> 06:12:30.000551+09:00

この場合、 1 つめのインスタンスは naive オブジェクト、 2 つめのインスタンスは aware オブジェクトです。

サンプルコード

次のサンプルを見てください。

import datetime

print(datetime.datetime(2020, 7, 21, 6, 12, 30, 551))
>> 2020-07-21 06:12:30.000551
print(datetime.date(2019, 12, 9))
>> 2019-12-09
print(datetime.time(23, 18, 45, 31112))
>> 23:18:45.031112

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
print(datetime.datetime(2020, 7, 21, 6, 12, 30, 551, tokyo_tz))
>> 2020-07-21 06:12:30.000551+09:00

ny_tz = datetime.timezone(datetime.timedelta(hours=-4))
print(datetime.datetime(2020, 7, 21, 6, 12, 30, 551, ny_tz))
>> 2020-07-21 06:12:30.000551-04:00

datetime クラス、 date クラス、 time クラスでぞれぞれインスタンスを作成し、日付や時刻に関する値を出力しました。

-- --

日付や時刻に関する値を指定してそれぞれのクラスのインスタンスを生成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。