datetime オブジェクトは date オブジェクトおよび time オブジェクトの全ての情報が入っている単一のオブジェクト です。date オブジェクトと同様に、datetime は 現在のグレゴリオ暦が両方向に延長されているものと仮定します; また、time オブジェクトと同様に、datetime は 毎日が厳密に 3600*24 秒であると仮定します。
以下にコンストラクタを示します:
| year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]) |
None または tzinfo クラスのサブクラスのインスタンス
にすることができます。残りの引数は整数または長整数で、
以下のような範囲に入ります:
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= 与えられた年と月における日数
0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000
引数がこれらの範囲外にある場合、 ValueError が送出されます。
その他のコンストラクタ、およびクラスメソッドを以下に示します:
| ) |
None
であるものとして返します。
これは
datetime.fromtimestamp(time.time()) と等価です。
now()、 fromtimestamp() も参照してください。
| [tz]) |
None であるか指定されていない場合、この
メソッドは today() と同様ですが、可能ならば
time.time() タイムスタンプを通じて得ることができる
より高い精度で時刻を提供します (例えば、プラットフォームが C
関数 gettimeofday() をサポートする場合には可能なことがあります)。
そうでない場合、tz はクラス tzinfo のサブクラスの
インスタンスでなければならず、現在の日付および時刻は
tz のタイムゾーンに変換されます。この場合、結果は
tz.fromutc(datetime.utcnow().replace(tzinfo=tz))
と等価になります。
today(), utcnow() も参照してください。
| ) |
None で
あるものとして返します。このメソッドは now() に似ていますが、
現在の UTC における日付と時刻を naive な datetime オブジェクト
として返します。now() も参照してください。
| timestamp[, tz]) |
None であるか、指定されて
いない場合、タイムスタンプはプラットフォームのローカルな日付および
時刻に変換され、返される datetime オブジェクトは naive
なものになります。
そうでない場合、 tz はクラス tzinfo のサブクラスの
インスタンスでなければならず、現在の日付および時刻は
tz のタイムゾーンに変換されます。この場合、結果は
tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))
と等価になります。
タイムスタンプがプラットフォームの C 関数 localtime() や gmtime() でサポートされている範囲を超えた場合、 fromtimestamp() は ValueError を送出する ことがあります。この範囲はよく 1970 年から 2038 年に制限されて います。 うるう秒がタイムスタンプの概念に含まれている非 POSIX システム では、fromtimestamp() はうるう秒を無視します。 このため、秒の異なる二つのタイムスタンプが同一の datetime オブジェクトとなることが起こり得ます。 utcfromtimestamp() も参照してください。
| timestamp) |
| ordinal) |
1 <= ordinal <= datetime.max.toordinal() でないかぎり
ValueError が送出されます。結果として返される
オブジェクトの時間、分、秒、およびマイクロ秒はすべて 0 となり、
tzinfo は None となります。
| date, time) |
d == datetime.combine(d.date(), d.timetz())
となります。date が datetime オブジェクトの場合、
その時刻と tzinfo は無視されます。
以下にクラス属性を示します:
datetime(MINYEAR, 1, 1, tzinfo=None) です。
datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None) です。
timedelta(microseconds=1)
です。
以下に (読み出し専用の) インスタンス属性を示します:
range(24) 内の値です。
range(60) 内の値です。
range(60) 内の値です。
range(1000000) 内の値です。
None
になります。
以下にサポートされている演算を示します:
| 演算 | 結果 |
|---|---|
datetime2 = datetime1 + timedelta |
(1) |
datetime2 = datetime1 - timedelta |
(2) |
timedelta = datetime1 - datetime2 |
(3) |
datetime1 < datetime2 |
datetime を datetime と比較します。 (4) |
datetime2 は datetime1 から時間 timedelta 移動したもので、
timedelta.days > 0 の場合進む方向に、
timedelta.days < 0 の場合戻る方向に移動します。
結果は入力の datetime と同じ tzinfo を持ち、
演算後には datetime2 - datetime1 == timedelta となります。
datetime2.year が MINYEAR よりも小さいか、
MAXYEAR より大きい場合には OverflowError
が送出されます。
入力が aware なオブジェクトの場合でもタイムゾーン修正は全く行われ
ません。
両方とも naive か、両方とも aware で同じ tzinfo メンバ
を持つ場合、tzinfo メンバは無視され、結果は
datetime2 + t == datetime1 であるような
timedelta オブジェクト t となります。
この場合タイムゾーン修正は全く行われません。
両方が aware で異なる tzinfo メンバを持つ場合、
a-b は a および b をまず naive な UTC datetime
オブジェクトに変換したかのようにして行います。演算結果は
決してオーバフローを起こさないことを除き、
(a.replace(tzinfo=None) - a.utcoffset()) -
(b.replace(tzinfo=None) - b.utcoffset())
と同じになります。
被演算子の片方が naive でもう一方が aware の場合、
TypeError が送出されます。両方の被演算子が aware で、
同じ tzinfo メンバを持つ場合、共通の tzinfo
メンバは無視され、基本の datetime 間の比較が行われます。
両方の被演算子が aware で異なる tzinfo メンバを持つ
場合、被演算子はまず (self.utcoffset() で得られる) UTC
オフセット で修正されます。
注意:
型混合の比較がデフォルトのオブジェクトアドレス比較となってしまう
のを抑止するために、被演算子のもう一方が datatime オブジェクトと
異なる型のオブジェクトの場合には TypeError が送出されます。
しかしながら、被比較演算子のもう一方が timetuple 属性を
持つ場合には NotImplemented が返されます。
このフックにより、他種の日付オブジェクトに型混合比較を実装する
チャンスを与えています。
そうでない場合、datetime オブジェクトと異なる型の
オブジェクトが比較されると、比較演算子が == または !=
でないかぎり TypeError が送出されます。
後者の場合、それぞれ False または True
を返します。
datetime オブジェクトは辞書のキーとして用いることができます。 ブール演算コンテキストでは、全ての datetime オブジェクトは 真であるとみなされます。
インスタンスメソッドを以下に示します:
| ) |
| ) |
None です。timetz() も参照
してください。
| ) |
| [year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) |
tzinfo=None を指定することもできます。
| tz) |
tz は tzinfo のサブクラスのインスタンスでなければ
ならず、インスタンスの utcoffset() および dst()
メソッドは None を返してはなりません。self は
aware でなくてはなりません (self.tzinfo が None
であってはならず、かつ self.utcoffset() は None
を返してはなりません)。
self.tzinfo が tz の場合、
self.astimezone(tz) は self に等しくなります:
日付および時刻データメンバに対する調整は行われません。
そうでない場合、結果はタイムゾーン tz におけるローカル時刻で、
self と同じ UTC 時刻を表すようになります:
astz = dt.astimezone(tz) とした後、
astz - astz.utcoffset()
は通常 dt - dt.utcoffset() と同じ日付および時刻
データメンバを持ちます。
tzinfo クラスに関する議論では、夏時間 (Daylight Saving time)
の遷移境界では上の等価性が成り立たないことを説明しています
(tz が標準時と夏時間の両方をモデル化している場合のみの問題です)。
単にタイムゾーンオブジェクト tz を datetime オブジェクト
dt に追加したいだけで、日付や時刻データメンバへの調整
を行わないのなら、dt.replace(tzinfo=tz) を使って
ください。
単に aware な datetime オブジェクト dt からタイムゾーン
オブジェクトを除去したいだけで、日付や時刻データメンバの変換を
行わないのなら、dt.replace(tzinfo=None) を使ってください。
デフォルトの tzinfo.fromutc() メソッドを tzinfo のサブクラスで上書きして、astimezone() が返す結果に 影響を及ぼすことができます。エラーの場合を無視すると、 astimezone() は以下のように動作します:
def astimezone(self, tz):
if self.tzinfo is tz:
return self
# Convert self to UTC, and attach the new time zone object.
utc = (self - self.utcoffset()).replace(tzinfo=tz)
# Convert from UTC to tz's local time.
return tz.fromutc(utc)
| ) |
None の場合、None を返し、
そうでない場合には self.tzinfo.utcoffset(self)
を返します。後者の式が None か、1 日以下の大きさを持つ
経過時間を表す timedelta オブジェクトのいずれかを返さない
場合には例外を送出します。
| ) |
None の場合、None を返し、
そうでない場合には self.tzinfo.dst(self)
を返します。後者の式が None か、1 日以下の大きさを持つ
経過時間を表す timedelta オブジェクトのいずれかを返さない
場合には例外を送出します。
| ) |
None の場合、None を返し、
そうでない場合には self.tzinfo.tzname(self)
を返します。後者の式が None か文字列オブジェクトのいずれか
を返さない場合には例外を送出します。
| ) |
d.timetuple() は
time.struct_time((d.year, d.month, d.day,
d.hour, d.minute, d.second,
d.weekday(),
d.toordinal() - date(d.year, 1, 1).toordinal() + 1,
dst))
と等価です。
返されるタプルの tm_isdst フラグは dst() メソッドに
従って設定されます: tzinfo が None か
dst() が None を返す場合、
tm_isdst は -1 に設定されます; そうでない場合、
dst() がゼロでない値を返すと、tm_isdst は 1
となります; それ以外の場合には tm_isdst は0 に設定
されます。
| ) |
d.timetuple() と同じであり、d.dst() の返す内容に
かかわらず tm_isdst が 0 に強制される点だけが異なります。
DST が UTC 時刻に影響を及ぼすことは決してありません。
d が aware の場合、d から d.utcoffset() が差し
引かれて UTC 時刻に正規化され、正規化された時刻の time.struct_time
を返します。tm_isdst は 0 に強制されます。
d.year が MINYEAR や MAXUEAR で、UTC への修正の結果
表現可能な年の境界を越えた場合には、戻り値の tm_year メンバは
MINYEAR-1 または MAXYEAR+1 になることがあります。
| ) |
self.date().toordinal() と同じです。
| ) |
self.date().weekday() と同じです。
isoweekday() も参照してください。
| ) |
self.date().isoweekday() と等価です。
weekday()、 isocalendar() も参照してください。
| ) |
self.date().isocalendar() と等価です。
| [sep]) |
None を返さない場合、
UTC からのオフセットを時間と分を表した (符号付きの) 6 文字からなる
文字列が追加されます: すなわち、
YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM
となるか、 microsecond が ゼロの場合には
YYYY-MM-DDTHH:MM:SS+HH:MM
となります。
オプションの引数 sep (デフォルトでは 'T' です)
は 1 文字のセパレータで、結果の文字列の日付と時刻の間に置かれます。
例えば、
>>> from datetime import tzinfo, timedelta, datetime
>>> class TZ(tzinfo):
... def utcoffset(self, dt): return timedelta(minutes=-399)
...
>>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
'2002-12-25 00:00:00-06:39'
| ) |
str(d) は d.isoformat(' ') と等価です。
| ) |
datetime(2002, 12, 4, 20, 30, 40).ctime() ==
'Wed Dec 4 20:30:40 2002'
のようにして返します。
ネイティブの C 関数 ctime()
(time.ctime() はこの関数を呼び出しますが、
datetime.ctime() は呼び出しません) が C 標準に準拠
しているプラットフォームでは、
d.ctime() は
time.ctime(time.mktime(d.timetuple()))
と等価です。
| format) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。