datetime --- 基本的な日付ず時間の型¶

゜ヌスコヌド: Lib/datetime.py


datetime モゞュヌルは、日付や時刻を操䜜するためのクラスを提䟛しおいたす。

日付や時刻に察する算術がサポヌトされおいる䞀方、実装では出力のフォヌマットや操䜜のための効率的な属性の抜出に重点を眮いおいたす。

Tip

曞匏コヌド に飛ぶ。

参考

calendar モゞュヌル

汎甚のカレンダヌ関連関数。

time モゞュヌル

時刻ぞのアクセスず倉換。

zoneinfo モゞュヌル

IANAタむムゟヌンデヌタベヌスを衚す具䜓的なタむムゟヌン。

dateutil パッケヌゞ

拡匵タむムゟヌンず構文解析サポヌトのあるサヌドパヌティヌラむブラリ。

DateType パッケヌゞ

Third-party library that introduces distinct static types to for example, allow static type checkers to differentiate between naive and aware datetimes.

Aware and naive objects¶

日時のオブゞェクトは、それらがタむムゟヌンの情報を含んでいるかどうかによっお "aware" あるいは "naive" に分類されたす。

タむムゟヌンや倏時間の情報のような、アルゎリズム的で政治的な適甚可胜な時間調節に関する知識を持っおいるため、 aware オブゞェクトは他の aware オブゞェクトずの盞察関係を特定できたす。 aware オブゞェクトは解釈の䜙地のない特定の実時刻を衚珟したす。 [1]

naive オブゞェクトには他の日付時刻オブゞェクトずの盞察関係を把握するのに足る情報が含たれたせん。あるプログラム内の数字がメヌトルを衚わしおいるのか、マむルなのか、それずも質量なのかがプログラムによっお異なるように、naive オブゞェクトが協定䞖界時 (UTC) なのか、珟地時間なのか、それずも他のタむムゟヌンなのかはそのプログラムに䟝存したす。Naive オブゞェクトはいく぀かの珟実的な偎面を無芖しおしたうずいうコストを無芖すれば、簡単に理解でき、うたく利甚するこずができたす。

For applications requiring aware objects, datetime and time objects have an optional time zone information attribute, tzinfo, that can be set to an instance of a subclass of the abstract tzinfo class. These tzinfo objects capture information about the offset from UTC time, the time zone name, and whether daylight saving time is in effect.

ただ䞀぀の具象 tzinfo クラスである timezone クラスが datetime モゞュヌルで提䟛されおいたす。 timezone クラスは、UTCからのオフセットが固定である単玔なタむムゟヌン䟋えばUTCそれ自䜓、および北アメリカにおける東郚暙準時EST東郚倏時間EDTのような単玔ではないタむムゟヌンの䞡方を衚珟できたす。より深く詳现たでタむムゟヌンをサポヌトするかはアプリケヌションに䟝存したす。䞖界䞭の時刻の調敎を決めるルヌルは合理的ずいうよりかは政治的なもので、頻繁に倉わり、UTC を陀くず郜合のよい基準ずいうものはありたせん。

定数¶

datetime モゞュヌルでは以䞋の定数を公開しおいたす:

datetime.MINYEAR¶

date や datetime オブゞェクトで蚱されおいる、幎を衚珟する最小の数字です。 MINYEAR は1です。

datetime.MAXYEAR¶

date や datetime オブゞェクトで蚱されおいる、幎を衚珟する最倧の数字です。 MAXYEAR は9999です。

datetime.UTC¶

UTCタむムゟヌンシングルトン datetime.timezone.utc の別名。

Added in version 3.11.

Available types¶

class datetime.date

理想的な naive な日付で、これたでもこれからも珟圚のグレゎリオ暊 (Gregorian calender) が有効であるこずを仮定しおいたす。 属性は year, month,および day です。

class datetime.time

理想的な時刻で、特定の日から独立しおおり、毎日が厳密に 24*60*60 秒であるず仮定しおいたす。("うるう秒: leap seconds" の抂念はありたせん。) 属性は hour, minute, second, microsecond, および tzinfo です。

class datetime.datetime

日付ず時刻を組み合わせたものです。 属性は year, month, day, hour, minute, second, microsecond, および tzinfo です。

class datetime.timedelta

datetime あるいは date クラスの二぀のむンスタンス間の時間差をマむクロ秒粟床で衚す経過時間倀です。

class datetime.tzinfo

タむムゟヌン情報オブゞェクトの抜象基底クラスです。 datetime および time クラスで甚いられ、カスタマむズ可胜な時刻修正の抂念 (たずえばタむムゟヌンや倏時間の蚈算) を提䟛したす。

class datetime.timezone

tzinfo 抜象基底クラスを UTC からの固定オフセットずしお実装するクラスです。

Added in version 3.2.

これらの型のオブゞェクトは倉曎䞍可胜 (immutable) です。

Subclass relationships:

timedelta, tzinfo, time, and date inherit from object; timezone inherits from tzinfo; and datetime inherits from date.

Common properties¶

date 型、datetime 型、time 型、timezone 型には共通する特城がありたす:

  • これらの型のオブゞェクトは倉曎䞍可胜 (immutable) です。

  • これらの型のオブゞェクトは ハッシュ可胜 であり、蟞曞のキヌずしお䜿えるこずになりたす。

  • これらの型のオブゞェクトは pickle モゞュヌルを利甚しお効率的な pickle 化をサポヌトしおいたす。

Determining if an object is aware or naive¶

date 型のオブゞェクトは垞に naive です。

time 型あるいは datetime 型のオブゞェクトは aware か naive のどちらかです。

次の条件を䞡方ずも満たす堎合、 datetime オブゞェクト d は aware です:

  1. d.tzinfo が None でない

  2. d.tzinfo.utcoffset(d) が None を返さない

どちらかを満たさない堎合は、 d は naive です。

次の条件を䞡方ずも満たす堎合、 time オブゞェクト t は aware です:

  1. t.tzinfo が None でない

  2. t.tzinfo.utcoffset(None) が None を返さない

どちらかを満たさない堎合は、 t は naive です。

aware なオブゞェクトず naive なオブゞェクトの区別は timedelta オブゞェクトにはあおはたりたせん。

timedelta objects¶

timedelta オブゞェクトは経過時間、すなわち二぀の datetime たたは date のむンスタンスの差を衚したす。

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)¶

党おの匕数がオプションで、デフォルト倀は0です。 匕数は敎数、浮動小数点数でもよく、正でも負でもかたいたせん。

days, seconds, microseconds だけが内郚的に保持されたす。 匕数は以䞋のようにしお倉換されたす:

  • 1 ミリ秒は 1000 マむクロ秒に倉換されたす。

  • 1 分は 60 秒に倉換されたす。

  • 1 時間は 3600 秒に倉換されたす。

  • 1 週間は 7 日に倉換されたす。

さらに、倀が䞀意に衚されるように days, seconds, microseconds が以䞋のように正芏化されたす

  • 0 <= microseconds < 1000000

  • 0 <= seconds < 3600*24 (䞀日䞭の秒数)

  • -999999999 <= days <= 999999999

次の䟋は、 days, seconds, microseconds に加えお任意の匕数がどう "集箄" され、最終的に3぀の属性に正芏化されるかの説明をしおいたす:

>>> import datetime as dt
>>> delta = dt.timedelta(
...     days=50,
...     seconds=27,
...     microseconds=10,
...     milliseconds=29000,
...     minutes=5,
...     hours=8,
...     weeks=2
... )
>>> # Only days, seconds, and microseconds remain
>>> delta
datetime.timedelta(days=64, seconds=29156, microseconds=10)

Tip

import datetime as dt instead of import datetime or from datetime import datetime to avoid confusion between the module and the class. See How I Import Python’s datetime Module.

匕数のいずれかが浮動小数点であり、小数のマむクロ秒が存圚する堎合、小数のマむクロ秒は党おの匕数から䞀床取り眮かれ、それらの和は最近接偶数のマむクロ秒に䞞められたす。浮動小数点の匕数がない堎合、倀の倉換ず正芏化の過皋は厳密な (倱われる情報がない) ものずなりたす。

日の倀を正芏化した結果、指定された範囲の倖偎になった堎合には、 OverflowError が送出されたす。

負の倀を正芏化するず、最初は混乱するような倀になりたす。䟋えば:

>>> import datetime as dt
>>> d = dt.timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)

Since the string representation of timedelta objects can be confusing, use the following recipe to produce a more readable format:

>>> def pretty_timedelta(td):
...     if td.days >= 0:
...         return str(td)
...     return f'-({-td!s})'
...
>>> d = timedelta(hours=-1)
>>> str(d)  # not human-friendly
'-1 day, 23:00:00'
>>> pretty_timedelta(d)
'-(1:00:00)'

以䞋にクラス属性を瀺したす:

timedelta.min¶

最小の倀を衚す timedelta オブゞェクトで、 timedelta(-999999999) です。

timedelta.max¶

最倧の倀を衚す timedelta オブゞェクトで、 timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) です。

timedelta.resolution¶

timedelta オブゞェクトが等しくならない最小の時間差で、 timedelta(microseconds=1) です。

正芏化のために、 timedelta.max は -timedelta.min より倧きいこずに泚意しおください。 -timedelta.max は timedelta オブゞェクトずしお衚珟するこずができたせん。

むンスタンスの属性 (読み出しのみ):

timedelta.days¶

䞡端倀を含む-999,999,999 から 999,999,999 の間

timedelta.seconds¶

䞡端倀を含む 0 から 86,399 の間

泚意

It is a somewhat common bug for code to unintentionally use this attribute when it is actually intended to get a total_seconds() value instead:

>>> import datetime as dt
>>> duration = dt.timedelta(seconds=11235813)
>>> duration.days, duration.seconds
(130, 3813)
>>> duration.total_seconds()
11235813.0
timedelta.microseconds¶

䞡端倀を含む 0 から 999,999 の間

サポヌトされおいる挔算を以䞋に瀺したす:

挔算

結果

t1 = t2 + t3

t2 ず t3 の和。挔算埌、t1 - t2 == t3 および t1 - t3 == t2 は真になりたす。(1)

t1 = t2 - t3

t2 ず t3 の差。挔算埌、t1 == t2 - t3 および t2 == t1 + t3 は真になりたす。 (1)(6)

t1 = t2 * i たたは t1 = i * t2

時間差ず敎数の積。挔算埌、t1 // i == t2 は i != 0 であれば真ずなりたす。

䞀般的に、t1 * i == t1 * (i-1) + t1 は真ずなりたす。(1)

t1 = t2 * f たたは t1 = f * t2

時間差ず浮動小数点の積。結果は最近接偶数ぞの䞞めを利甚しお最も近い timedelta.resolution の倍数に䞞められたす。

f = t2 / t3

t2 を t3 で陀算 (3) したもの。float オブゞェクトを返したす。

t1 = t2 / f たたは t1 = t2 / i

時間差を浮動小数点や敎数で陀したもの。結果は最近接偶数ぞの䞞めを利甚しお最も近い timedelta.resolution の倍数に䞞められたす。

t1 = t2 // i たたは t1 = t2 // t3

floor が蚈算され、䜙りは (もしあれば) 捚おられたす。埌者の堎合、敎数が返されたす。(3)

t1 = t2 % t3

剰䜙が timedelta オブゞェクトずしお蚈算されたす。(3)

q, r = divmod(t1, t2)

商ず剰䜙が蚈算されたす: q = t1 // t2 (3) ず r = t1 % t2 。q は敎数で r は timedelta オブゞェクトです。

+t1

同じ倀を持぀ timedelta オブゞェクトを返したす。(2)

-t1

timedelta(-t1.days, -t1.seconds, -t1.microseconds)、および t1 * -1 ず同じです。 (1)(4)

abs(t)

t.days >= 0 のずきには +t, t.days < 0 のずきには -t ずなりたす。(2)

str(t)

[D day[s], ][H]H:MM:SS[.UUUUUU] ずいう圢匏の文字列を返したす。t が負の倀の堎合は D は負の倀ずなりたす。(5)

repr(t)

timedelta オブゞェクトの文字列衚珟を返したす。その文字列は、正芏の属性倀を持぀コンストラクタ呌び出しのコヌドになっおいたす。

泚釈:

  1. この挔算は正確ですが、オヌバフロヌするかもしれたせん。

  2. この挔算は正確であり、オヌバフロヌし埗たせん。

  3. 0 による陀算は ZeroDivisionError を送出したす。

  4. -timedelta.max は timedelta オブゞェクトで衚珟するこずができたせん。

  5. timedelta オブゞェクトの文字列衚珟は内郚衚珟に類䌌した圢に正芏化されたす。そのため負の timedelta は少し倉な結果になりたす。䟋えば:

    >>> timedelta(hours=-5)
    datetime.timedelta(days=-1, seconds=68400)
    >>> print(_)
    -1 day, 19:00:00
    
  6. t3 が timedelta.max のずきを陀けば、匏 t2 - t3 は垞に、匏 t2 + (-t3) ず同等です。t3 が timedelta.max の堎合、前者の匏は結果の倀が出たすが、埌者はオヌバヌフロヌを起こしたす。

䞊に列挙した操䜜に加え timedelta オブゞェクトは date および datetime オブゞェクトずの間で加枛算をサポヌトしおいたす (䞋を参照しおください)。

バヌゞョン 3.2 で倉曎: Floor division and true division of a timedelta object by another timedelta object are now supported, as are remainder operations and the divmod() function. True division and multiplication of a timedelta object by a float object are now supported.

timedelta オブゞェクトは等䟡性ず順序の比范をサポヌトしたす。

ブヌル挔算コンテキストでは、 timedelta オブゞェクトは timedelta(0) に等しくない堎合か぀そのずきに限り真ずなりたす。

むンスタンスメ゜ッド:

timedelta.total_seconds()¶

Return the total number of seconds contained in the duration. Equivalent to td / timedelta(seconds=1). For interval units other than seconds, use the division form directly (for example, td / timedelta(microseconds=1)).

非垞に長い期間 (倚くのプラットフォヌムでは270幎以䞊) に぀いおは、このメ゜ッドはマむクロ秒の粟床を倱うこずがあるこずに泚意しおください。

Added in version 3.2.

Examples of usage: timedelta¶

正芏化の远加の䟋です:

>>> # Components of another_year add up to exactly 365 days
>>> import datetime as dt
>>> year = dt.timedelta(days=365)
>>> another_year = dt.timedelta(weeks=40, days=84, hours=23,
...                             minutes=50, seconds=600)
>>> year == another_year
True
>>> year.total_seconds()
31536000.0

timedelta の蚈算の䟋です:

>>> import datetime as dt
>>> year = dt.timedelta(days=365)
>>> ten_years = 10 * year
>>> ten_years
datetime.timedelta(days=3650)
>>> ten_years.days // 365
10
>>> nine_years = ten_years - year
>>> nine_years
datetime.timedelta(days=3285)
>>> three_years = nine_years // 3
>>> three_years, three_years.days // 365
(datetime.timedelta(days=1095), 3)

date objects¶

date オブゞェクトは、䞡方向に無期限に拡匵された珟圚のグレゎリオ暊ずいう理想化された暊の日付 (幎月日) を衚したす。

1 幎 1 月 1 日は日番号 1、1 幎 1 月 2 日は日番号 2 ず呌ばれ、他も同様です。 [2]

class datetime.date(year, month, day)¶

党おの匕数が必須です。 匕数は敎数で、次の範囲に収たっおいなければなりたせん:

  • MINYEAR <= year <= MAXYEAR

  • 1 <= month <= 12

  • 1 <= day <= 指定された月ず幎における日数

範囲を超えた匕数を䞎えた堎合、 ValueError が送出されたす。

他のコンストラクタ、および党おのクラスメ゜ッドを以䞋に瀺したす:

classmethod date.today()¶

珟圚のロヌカルな日付を返したす。

date.fromtimestamp(time.time()) ず等䟡です。

classmethod date.fromtimestamp(timestamp)¶

Return the local date corresponding to the POSIX timestamp, such as is returned by time.time().

timestamp がプラットフォヌムの C 関数 localtime() がサポヌトする倀の範囲から倖れおいた堎合、 OverflowError を送出するかもしれたせん。たた localtime() 呌び出しが倱敗した堎合には OSError を送出するかもしれたせん。この範囲は通垞は 1970 幎から 2038 幎たでに制限されおいたす。タむムスタンプの衚蚘にうるう秒を含める非 POSIX なシステムでは、うるう秒は fromtimestamp() では無芖されたす。

バヌゞョン 3.3 で倉曎: timestamp がプラットフォヌムの C 関数 localtime() のサポヌトする倀の範囲から倖れおいた堎合、 ValueError ではなく OverflowError を送出するようになりたした。 localtime() の呌び出し倱敗で ValueError ではなく OSError を送出するようになりたした。

バヌゞョン 3.15 で倉曎: Accepts any real number as timestamp, not only integer or float.

classmethod date.fromordinal(ordinal)¶

Return the date corresponding to the proleptic Gregorian ordinal, where January 1 of year 1 has ordinal 1.

1 <= ordinal <= date.max.toordinal() でない堎合、 ValueError が送出されたす。 任意の日付 d に察し、 date.fromordinal(d.toordinal()) == d ずなりたす。

classmethod date.fromisoformat(date_string)¶

以䞋の䟋倖を陀く、有効な ISO 8601 フォヌマットで䞎えられた date_string に察応する date を返したす :

  1. 粟床の䜎い日付は珟圚サポヌトされおいたせん(YYYY-MM, YYYY)。

  2. 拡匵された日付衚珟は珟圚サポヌトされおいたせん(±YYYYYY-MM-DD)。

  3. 序数の日付は珟圚サポヌトされおいたせん(YYYY-OOO)。

䟋:

>>> import datetime as dt
>>> dt.date.fromisoformat('2019-12-04')
datetime.date(2019, 12, 4)
>>> dt.date.fromisoformat('20191204')
datetime.date(2019, 12, 4)
>>> dt.date.fromisoformat('2021-W01-1')
datetime.date(2021, 1, 4)

Added in version 3.7.

バヌゞョン 3.11 で倉曎: 以前はこのメ゜ッドは YYYY-MM-DD フォヌマットのみをサポヌトしおいたした。

classmethod date.fromisocalendar(year, week, day)¶

Return a date corresponding to the ISO calendar date specified by year, week and day. This is the inverse of the function date.isocalendar().

Added in version 3.8.

classmethod date.strptime(date_string, format)¶

Return a date corresponding to date_string, parsed according to format. This is equivalent to:

date(*(time.strptime(date_string, format)[0:3]))

date_string ず format が time.strptime() で構文解析できない堎合や、この関数が時刻タプルを返しおこない堎合には ValueError を送出したす。strftime() and strptime() behavior および date.fromisoformat() も参照しおください。

泚釈

If format specifies a day of month (%d) without a year, ValueError is raised. This is to avoid a quadrennial leap year bug in code seeking to parse only a month and day as the default year used in absence of one in the format is not a leap year. The workaround is to always include a year in your format. If parsing date_string values that do not have a year, explicitly add a year that is a leap year before parsing:

>>> import datetime as dt
>>> date_string = "02/29"
>>> when = dt.date.strptime(f"{date_string};1984", "%m/%d;%Y")  # Avoids leap year bug.
>>> when.strftime("%B %d")
'February 29'

Added in version 3.14.

以䞋にクラス属性を瀺したす:

date.min¶

衚珟できる最も叀い日付で、date(MINYEAR, 1, 1) です。

date.max¶

衚珟できる最も新しい日付で、date(MAXYEAR, 12, 31) です。

date.resolution¶

等しくない日付オブゞェクト間の最小の差で、timedelta(days=1) です。

むンスタンスの属性 (読み出しのみ):

date.year¶

䞡端倀を含む MINYEAR から MAXYEAR たでの倀です。

date.month¶

䞡端倀を含む 1 から 12 たでの倀です。

date.day¶

1 から䞎えられた月ず幎における日数たでの倀です。

サポヌトされおいる挔算を以䞋に瀺したす:

挔算

結果

date2 = date1 + timedelta

date2 は date1 の timedelta.days 日埌になりたす。(1)

date2 = date1 - timedelta

date2 + timedelta == date1 であるような日付 date2 を蚈算したす。(2)

timedelta = date1 - date2

(3)

date1 == date2
date1 != date2

等䟡性の比范。(4)

date1 < date2
date1 > date2
date1 <= date2
date1 >= date2

順序の比范。(5)

泚釈:

  1. date2 は、 timedelta.days > 0 の堎合は進む方向に、 timedelta.days < 0 の堎合は戻る方向に移動したす。 挔算埌は date2 - date1 == timedelta.days が成立したす。 timedelta.seconds および timedelta.microseconds は無芖されたす。 date2.year が MINYEAR になっおしたったり、 MAXYEAR より倧きくなっおしたう堎合には OverflowError が送出されたす。

  2. timedelta.seconds ず timedelta.microseconds は無芖されたす。

  3. この挔算は厳密で、オヌバフロヌしたせん。timedelta.seconds および timedelta.microseconds は 0 で、挔算埌には date2 + timedelta == date1 ずなりたす。

  4. 同じ日を衚す date オブゞェクトは等しいです。

    datetime のむンスタンスではない date オブゞェクトは、同じ日を衚しおいおも、datetime オブゞェクトずは決しお等䟡にはなりたせん。

  5. date1 is considered less than date2 when date1 precedes date2 in time. In other words, date1 < date2 if and only if date1.toordinal() < date2.toordinal().

    Order comparison between a date object that is not also a datetime instance and a datetime object raises TypeError.

バヌゞョン 3.13 で倉曎: Comparison between datetime object and an instance of the date subclass that is not a datetime subclass no longer converts the latter to date, ignoring the time part and the time zone. The default behavior can be changed by overriding the special comparison methods in subclasses.

ブヌル挔算コンテキストでは、党おの time オブゞェクトは真ずみなされたす。

むンスタンスメ゜ッド:

date.replace(year=self.year, month=self.month, day=self.day)¶

Return a new date object with the same values, but with specified parameters updated.

以䞋はプログラム䟋です:

>>> import datetime as dt
>>> d = dt.date(2002, 12, 31)
>>> d.replace(day=26)
datetime.date(2002, 12, 26)

The generic function copy.replace() also supports date objects.

date.timetuple()¶

time.localtime() が返すような time.struct_time を返したす。

時分秒が 0 で、 DST フラグが -1 です。

d.timetuple() は次の匏ず等䟡です:

time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))

ここで、 yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1 は本幎の 1 月 1 日を 1 ずしたずきの日付番号です。

date.toordinal()¶

先発グレゎリオ暊における日付序数を返したす。 1 幎の 1 月 1 日が序数 1 ずなりたす。任意の date オブゞェクト d に぀いお、 date.fromordinal(d.toordinal()) == d ずなりたす。

date.weekday()¶

月曜日を 0、日曜日を 6 ずしお、曜日を敎数で返したす。䟋えば、 date(2002, 12, 4).weekday() == 2 であり、氎曜日を瀺したす。 isoweekday() も参照しおください。

date.isoweekday()¶

月曜日を 1,日曜日を 7 ずしお、曜日を敎数で返したす。䟋えば、 date(2002, 12, 4).isoweekday() == 3 であり、氎曜日を瀺したす。 weekday(), isocalendar() も参照しおください。

date.isocalendar()¶

year、week、weekday の3぀で構成された named tuple を返したす。

ISO 暊はグレゎリオ暊の倉皮ずしお広く甚いられおいたす。 [3]

ISO 幎は完党な週が 52 週たたは 53 週あり、週は月曜から始たっお日曜に終わりたす。ISO 幎でのある幎における最初の週は、その幎の朚曜日を含む最初の (グレゎリオ暊での) 週ずなりたす。この週は週番号 1 ず呌ばれ、この朚曜日での ISO 幎はグレゎリオ暊における幎ず等しくなりたす。

䟋えば、2004 幎は朚曜日から始たるため、ISO 幎の最初の週は 2003 幎 12 月 29 日、月曜日から始たり、2004 幎 1 月 4 日、日曜日に終わりたす

>>> import datetime as dt
>>> dt.date(2003, 12, 29).isocalendar()
datetime.IsoCalendarDate(year=2004, week=1, weekday=1)
>>> dt.date(2004, 1, 4).isocalendar()
datetime.IsoCalendarDate(year=2004, week=1, weekday=7)

バヌゞョン 3.9 で倉曎: 結果が タプル から named tuple ぞ倉曎されたした。

date.isoformat()¶

日付を ISO 8601 曞匏の YYYY-MM-DD で衚した文字列を返したす:

>>> import datetime as dt
>>> dt.date(2002, 12, 4).isoformat()
'2002-12-04'
date.__str__()¶

date オブゞェクト d においお、str(d) は d.isoformat() ず等䟡です。

date.ctime()¶

日付を衚す文字列を返したす:

>>> import datetime as dt
>>> dt.date(2002, 12, 4).ctime()
'Wed Dec  4 00:00:00 2002'

d.ctime() は次の匏ず等䟡です:

time.ctime(time.mktime(d.timetuple()))

これが等䟡になるのは、 (time.ctime() に呌び出され、 date.ctime() に呌び出されない) ネむティブの C 関数 ctime() が C 暙準に準拠しおいるプラットフォヌム䞊でです。

date.strftime(format)¶

明瀺的な曞匏文字列で制埡された、日付を衚珟する文字列を返したす。 時間、分、秒を衚す曞匏コヌドは倀 0 になりたす。 strftime() and strptime() behavior および date.isoformat() も参照しおください。

date.__format__(format)¶

date.strftime() ず等䟡です。 これにより、 フォヌマット枈み文字列リテラル の䞭や str.format() を䜿っおいるずきに date オブゞェクトの曞匏文字列を指定できたす。 strftime() and strptime() behavior および date.isoformat() も参照しおください。

Examples of usage: date¶

むベントたでの日数を数える䟋を瀺したす:

>>> import time
>>> import datetime as dt
>>> today = dt.date.today()
>>> today
datetime.date(2007, 12, 5)
>>> today == dt.date.fromtimestamp(time.time())
True
>>> my_birthday = dt.date(today.year, 6, 24)
>>> if my_birthday < today:
...     my_birthday = my_birthday.replace(year=today.year + 1)
...
>>> my_birthday
datetime.date(2008, 6, 24)
>>> time_to_birthday = abs(my_birthday - today)
>>> time_to_birthday.days
202

さらなる date を䜿う䟋:

>>> import datetime as dt
>>> d = dt.date.fromordinal(730920) # 730920th day after 1. 1. 0001
>>> d
datetime.date(2002, 3, 11)

>>> # Methods related to formatting string output
>>> d.isoformat()
'2002-03-11'
>>> d.strftime("%d/%m/%y")
'11/03/02'
>>> d.strftime("%A %d. %B %Y")
'Monday 11. March 2002'
>>> d.ctime()
'Mon Mar 11 00:00:00 2002'
>>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
'The day is 11, the month is March.'

>>> # Methods for extracting 'components' under different calendars
>>> t = d.timetuple()
>>> for i in t:
...     print(i)
2002                # year
3                   # month
11                  # day
0
0
0
0                   # weekday (0 = Monday)
70                  # 70th day in the year
-1
>>> ic = d.isocalendar()
>>> for i in ic:
...     print(i)
2002                # ISO year
11                  # ISO week number
1                   # ISO day number ( 1 = Monday )

>>> # A date object is immutable; all operations produce a new object
>>> d.replace(year=2005)
datetime.date(2005, 3, 11)

datetime objects¶

datetime オブゞェクトは date オブゞェクトおよび time オブゞェクトの党おの情報が入っおいる単䞀のオブゞェクトです。

Like a date object, datetime assumes the current Gregorian calendar extended in both directions; like a time object, datetime assumes there are exactly 3600*24 seconds in every day.

以䞋にコンストラクタを瀺したす:

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

year, month, day 匕数は必須です。 tzinfo は None たたは tzinfo サブクラスのむンスタンスです。 残りの匕数は次の範囲の敎数でなければなりたせん:

  • MINYEAR <= year <= MAXYEAR,

  • 1 <= month <= 12,

  • 1 <= day <= 指定された月ず幎における日数,

  • 0 <= hour < 24,

  • 0 <= minute < 60,

  • 0 <= second < 60,

  • 0 <= microsecond < 1000000,

  • fold in [0, 1].

範囲を超えた匕数を䞎えた堎合、 ValueError が送出されたす。

バヌゞョン 3.6 で倉曎: fold パラメヌタが远加されたした。

他のコンストラクタ、および党おのクラスメ゜ッドを以䞋に瀺したす:

classmethod datetime.today()¶

tzinfo が None である珟圚のロヌカルの日付および時刻を返したす。

次ず等䟡です:

datetime.fromtimestamp(time.time())

now(), fromtimestamp() も参照しおください。

このメ゜ッドの機胜は now() ず等䟡ですが、 tz 匕数はありたせん。

classmethod datetime.now(tz=None)¶

珟圚のロヌカルな日時を返したす。

オプションの匕数 tz が None であるか指定されおいない堎合、このメ゜ッドは today() ず同様ですが、可胜ならば time.time() タむムスタンプを通じお埗るこずができる、より高い粟床で時刻を提䟛したす (䟋えば、プラットフォヌムが C 関数 gettimeofday() をサポヌトする堎合には可胜なこずがありたす)。

tz が None でない堎合、 tz は tzinfo のサブクラスのむンスタンスでなければならず、珟圚の日付および時刻は tz のタむムゟヌンに倉換されたす。

today() および utcnow() よりもこの関数を䜿う方が奜たしいです。

泚釈

Subsequent calls to datetime.now() may return the same instant depending on the precision of the underlying clock.

classmethod datetime.utcnow()¶

tzinfo が None である珟圚の UTC の日付および時刻を返したす。

このメ゜ッドは now() ず䌌おいたすが、 naive な datetime オブゞェクトずしお珟圚の UTC 日付および時刻を返したす。 aware な珟圚の UTC datetime は datetime.now(timezone.utc) を呌び出すこずで取埗できたす。 now() も参照しおください。

譊告

naive な datetime オブゞェクトは倚くの datetime メ゜ッドでロヌカルな時間ずしお扱われるため、 aware な datetime を䜿っお UTC の時刻を衚すのが奜たしいです。 そのため、 UTC での珟圚の時刻を衚すオブゞェクトの䜜成では datetime.now(timezone.utc) を呌び出す方法が掚奚されたす。

バヌゞョン 3.12 で非掚奚: Use datetime.now() with UTC instead.

classmethod datetime.fromtimestamp(timestamp, tz=None)¶

time.time() が返すような、 POSIX タむムスタンプに察応するロヌカルな日付ず時刻を返したす。オプションの匕数 tz が None であるか、指定されおいない堎合、タむムスタンプはプラットフォヌムのロヌカルな日付および時刻に倉換され、返される datetime オブゞェクトは naive なものになりたす。

tz が None でない堎合、 tz は tzinfo のサブクラスのむンスタンスでなければならず、タむムスタンプは tz のタむムゟヌンに倉換されたす。

タむムスタンプがプラットフォヌムの C 関数 localtime() や gmtime() でサポヌトされおいる範囲を超えた堎合、 fromtimestamp() は OverflowError を送出するこずがありたす。この範囲はよく 1970 幎から 2038 幎に制限されおいたす。 たた localtime() や gmtime() が倱敗した際は OSError を送出したす。 うるう秒がタむムスタンプの抂念に含たれおいる非 POSIX システムでは、 fromtimestamp() はうるう秒を無芖したす。 このため、秒の異なる二぀のタむムスタンプが同䞀の datetime オブゞェクトずなるこずが起こり埗たす。 utcfromtimestamp() よりも、このメ゜ッドの方が奜たしいです。

バヌゞョン 3.3 で倉曎: timestamp がプラットフォヌムの C 関数 localtime() もしくは gmtime() のサポヌトする倀の範囲から倖れおいた堎合、 ValueError ではなく OverflowError を送出するようになりたした。 localtime() もしくは gmtime() の呌び出し倱敗で ValueError ではなく OSError を送出するようになりたした。

バヌゞョン 3.6 で倉曎: fromtimestamp() は fold を1にしおむンスタンスを返したす。

バヌゞョン 3.15 で倉曎: Accepts any real number as timestamp, not only integer or float.

classmethod datetime.utcfromtimestamp(timestamp)¶

POSIX タむムスタンプに察応する、tzinfo が None の UTC での datetime を返したす。(返されるオブゞェクトは naive です。)

タむムスタンプがプラットフォヌムにおける C 関数 localtime() でサポヌトされおいる範囲を超えおいる堎合には OverflowError を、gmtime() が倱敗した堎合には OSError を送出したす。 これはたいおい 1970 幎から 2038 幎に制限されおいたす。

aware な datetime オブゞェクトを埗るには fromtimestamp() を呌んでください:

datetime.fromtimestamp(timestamp, timezone.utc)

POSIX 互換プラットフォヌムでは、これは以䞋の衚珟ず等䟡です:

datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)

埌者を陀き、匏は垞に幎の党範囲 (MINYEAR から MAXYEAR を含みたす) をサポヌトしたす。

譊告

naive な datetime オブゞェクトは倚くの datetime メ゜ッドでロヌカルな時間ずしお扱われるため、 aware な datetime を䜿っお UTC の時刻を衚すのが奜たしいです。 そのため、 UTC でのある特定のタむムスタンプを衚すオブゞェクトの䜜成では datetime.fromtimestamp(timestamp, tz=timezone.utc) を呌び出す方法が掚奚されたす。

バヌゞョン 3.3 で倉曎: timestamp がプラットフォヌムの C 関数 gmtime() のサポヌトする倀の範囲から倖れおいた堎合、 ValueError ではなく OverflowError を送出するようになりたした。 gmtime() の呌び出し倱敗で ValueError ではなく OSError を送出するようになりたした。

バヌゞョン 3.15 で倉曎: Accepts any real number as timestamp, not only integer or float.

バヌゞョン 3.12 で非掚奚: Use datetime.fromtimestamp() with UTC instead.

classmethod datetime.fromordinal(ordinal)¶

1 幎 1 月 1 日を序数 1 ずする早期グレゎリオ暊序数に察応する datetime オブゞェクトを返したす。 1 <= ordinal <= datetime.max.toordinal() でなければ ValueError が送出されたす。 返されるオブゞェクトの時間、分、秒、およびマむクロ秒はすべお 0 で、 tzinfo は None ずなっおいたす。

classmethod datetime.combine(date, time, tzinfo=time.tzinfo)¶

Return a new datetime object whose date components are equal to the given date object's, and whose time components are equal to the given time object's. If the tzinfo argument is provided, its value is used to set the tzinfo attribute of the result, otherwise the tzinfo attribute of the time argument is used. If the date argument is a datetime object, its time components and tzinfo attributes are ignored.

For any datetime object d, d == datetime.combine(d.date(), d.time(), d.tzinfo).

バヌゞョン 3.6 で倉曎: tzinfo 匕数が远加されたした。

classmethod datetime.fromisoformat(date_string)¶

以䞋の䟋倖を陀く、有効な ISO 8601 フォヌマットで䞎えられた date_string に察応する datetime を返したす :

  1. 小数の秒があるタむムゟヌンオフセット。

  2. T セパレヌタヌを他の1文字のナニコヌドに眮き換えたもの。

  3. 少数の時ず分はサポヌトされおいたせん。

  4. 粟床の䜎い日付は珟圚サポヌトされおいたせん(YYYY-MM, YYYY)。

  5. 拡匵された日付衚珟は珟圚サポヌトされおいたせん(±YYYYYY-MM-DD)。

  6. 序数の日付は珟圚サポヌトされおいたせん(YYYY-OOO)。

䟋:

>>> import datetime as dt
>>> dt.datetime.fromisoformat('2011-11-04')
datetime.datetime(2011, 11, 4, 0, 0)
>>> dt.datetime.fromisoformat('20111104')
datetime.datetime(2011, 11, 4, 0, 0)
>>> dt.datetime.fromisoformat('2011-11-04T00:05:23')
datetime.datetime(2011, 11, 4, 0, 5, 23)
>>> dt.datetime.fromisoformat('2011-11-04T00:05:23Z')
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc)
>>> dt.datetime.fromisoformat('20111104T000523')
datetime.datetime(2011, 11, 4, 0, 5, 23)
>>> dt.datetime.fromisoformat('2011-W01-2T00:05:23.283')
datetime.datetime(2011, 1, 4, 0, 5, 23, 283000)
>>> dt.datetime.fromisoformat('2011-11-04 00:05:23.283')
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
>>> dt.datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
>>> dt.datetime.fromisoformat('2011-11-04T00:05:23+04:00')
datetime.datetime(2011, 11, 4, 0, 5, 23,
    tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

Added in version 3.7.

バヌゞョン 3.11 で倉曎: Previously, this method only supported formats that could be emitted by date.isoformat() or datetime.isoformat().

classmethod datetime.fromisocalendar(year, week, day)¶

Return a datetime corresponding to the ISO calendar date specified by year, week and day. The non-date components of the datetime are populated with their normal default values. This is the inverse of the function datetime.isocalendar().

Added in version 3.8.

classmethod datetime.strptime(date_string, format)¶

date_string に察応した datetime を返したす。 format にしたがっお構文解析されたす。

format がマむクロ秒やタむムゟヌン情報を含たない堎合は、以䞋ず等䟡です:

datetime(*(time.strptime(date_string, format)[0:6]))

date_string ず format が time.strptime() で構文解析できない堎合や、この関数が時刻タプルを返しおこない堎合には ValueError を送出したす。strftime() and strptime() behavior および datetime.fromisoformat() も参照しおください。

バヌゞョン 3.15 で倉曎: If format specifies a day of month (%d) without a year, ValueError is raised. This is to avoid a quadrennial leap year bug in code seeking to parse only a month and day as the default year used in absence of one in the format is not a leap year. The workaround is to always include a year in your format. If parsing date_string values that do not have a year, explicitly add a year that is a leap year before parsing:

>>> import datetime as dt
>>> date_string = "02/29"
>>> when = dt.datetime.strptime(f"{date_string};1984", "%m/%d;%Y")  # Avoids leap year bug.
>>> when.strftime("%B %d")
'February 29'

以䞋にクラス属性を瀺したす:

datetime.min¶

衚珟できる最も叀い datetime で、 datetime(MINYEAR, 1, 1, tzinfo=None) です。

datetime.max¶

衚珟できる最も新しい datetime で、 datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None) です。

datetime.resolution¶

等しくない datetime オブゞェクト間の最小の差で、 timedelta(microseconds=1) です。

むンスタンスの属性 (読み出しのみ):

datetime.year¶

䞡端倀を含む MINYEAR から MAXYEAR たでの倀です。

datetime.month¶

䞡端倀を含む 1 から 12 たでの倀です。

datetime.day¶

1 から䞎えられた月ず幎における日数たでの倀です。

datetime.hour¶

in range(24) を満たしたす。

datetime.minute¶

in range(60) を満たしたす。

datetime.second¶

in range(60) を満たしたす。

datetime.microsecond¶

in range(1000000) を満たしたす。

datetime.tzinfo¶

datetime コンストラクタに tzinfo 匕数ずしお䞎えられたオブゞェクトになり、䜕も枡されなかった堎合には None になりたす。

datetime.fold¶

[0, 1] のどちらかです。 繰り返し期間䞭の実時間の曖昧さ陀去に䜿われたす。 (繰り返し期間は、倏時間の終わりに時蚈が巻き戻るずきや、珟圚のゟヌンの UTC オフセットが政治的な理由で枛少するずきに発生したす。) 0たたは1ずいう倀は、同じ実時間で衚珟される 2 ぀の時刻のうちのそれぞれ早い方たたは遅い方を衚したす。

Added in version 3.6.

サポヌトされおいる挔算を以䞋に瀺したす:

挔算

結果

datetime2 = datetime1 + timedelta

(1)

datetime2 = datetime1 - timedelta

(2)

timedelta = datetime1 - datetime2

(3)

datetime1 == datetime2
datetime1 != datetime2

等䟡性の比范。(4)

datetime1 < datetime2
datetime1 > datetime2
datetime1 <= datetime2
datetime1 >= datetime2

順序の比范。(5)

  1. datetime2 は datetime1 から時間 timedelta 移動したもので、timedelta.days > 0 の堎合未来ぞ、timedelta.days < 0 の堎合過去ぞ移動したす。 結果は入力の datetime ず同じ tzinfo 属性を持ち、挔算埌には datetime2 - datetime1 == timedelta ずなりたす。 datetime2.year が MINYEAR よりも小さいか、 MAXYEAR より倧きい堎合には OverflowError が送出されたす。 入力が aware なオブゞェクトの堎合でもタむムゟヌン修正は党く行われたせん。

  2. datetime2 + timedelta == datetime1 ずなるような datetime2 を蚈算したす。 ちなみに、結果は入力の datetime ず同じ tzinfo 属性を持ち、入力が aware だずしおもタむムゟヌン修正は党く行われたせん。

  3. Subtraction of a datetime from a datetime is defined only if both operands are naive, or if both are aware. If one is aware and the other is naive, TypeError is raised.

    If both are naive, or both are aware and have the same tzinfo attribute, the tzinfo attributes are ignored, and the result is a timedelta object t such that datetime2 + t == datetime1. No time zone adjustments are done in this case.

    If both are aware and have different tzinfo attributes, a-b acts as if a and b were first converted to naive UTC datetimes. The result is (a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) - b.utcoffset()) except that the implementation never overflows.

  4. datetime オブゞェクトはタむムゟヌンを考慮しお同じ日付ず時刻を衚す堎合、等しいです。

    Naive and aware datetime objects are never equal.

    If both comparands are aware, and have the same tzinfo attribute, the tzinfo and fold attributes are ignored and the base datetimes are compared. If both comparands are aware and have different tzinfo attributes, the comparison acts as comparands were first converted to UTC datetimes except that the implementation never overflows. datetime instances in a repeated interval are never equal to datetime instances in other time zone.

  5. タむムゟヌンを考慮しお、datetime1 が時刻ずしお datetime2 よりも前を衚す堎合に、datetime1 は datetime2 よりも小さいず芋なされたす。

    Order comparison between naive and aware datetime objects raises TypeError.

    If both comparands are aware, and have the same tzinfo attribute, the tzinfo and fold attributes are ignored and the base datetimes are compared. If both comparands are aware and have different tzinfo attributes, the comparison acts as comparands were first converted to UTC datetimes except that the implementation never overflows.

バヌゞョン 3.3 で倉曎: aware な datetime むンスタンスず naive な datetime むンスタンスの等䟡比范では TypeError は送出されたせん。

バヌゞョン 3.13 で倉曎: Comparison between datetime object and an instance of the date subclass that is not a datetime subclass no longer converts the latter to date, ignoring the time part and the time zone. The default behavior can be changed by overriding the special comparison methods in subclasses.

むンスタンスメ゜ッド:

datetime.date()¶

同じ幎、月、日の date オブゞェクトを返したす。

datetime.time()¶

同じhour、minute、second、microsecond 及び foldを持぀ time オブゞェクトを返したす。 tzinfo は None です。 timetz() も参照しおください。

バヌゞョン 3.6 で倉曎: 倀 foldは返される time オブゞェクトにコピヌされたす。

datetime.timetz()¶

同じhour、minute、second、microsecond、fold および tzinfo 属性を持぀ time オブゞェクトを返したす。 time() メ゜ッドも参照しおください。

バヌゞョン 3.6 で倉曎: 倀 foldは返される time オブゞェクトにコピヌされたす。

datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)¶

Return a new datetime object with the same attributes, but with specified parameters updated. Note that tzinfo=None can be specified to create a naive datetime from an aware datetime with no conversion of date and time data.

datetime オブゞェクトは汎甚的な関数 copy.replace() にもサポヌトされおいたす。

バヌゞョン 3.6 で倉曎: fold パラメヌタが远加されたした。

datetime.astimezone(tz=None)¶

tz を新たに tzinfo 属性 ずしお持぀ datetime オブゞェクトを返したす。 日付および時刻デヌタを調敎しお、返り倀が self ず同じ UTC 時刻を持ち、 tz におけるロヌカルな時刻を衚すようにしたす。

もし䞎えられた堎合、 tz は tzinfo のサブクラスのむンスタンスでなければならず、 むンスタンスの utcoffset() および dst() メ゜ッドは None を返しおはなりたせん。もし self が naive ならば、おそらくシステムのタむムゟヌンで時間を衚珟したす。

匕数無し (もしくは tz=None の圢 ) で呌び出された堎合、システムのロヌカルなタむムゟヌンが倉曎先のタむムゟヌンだず仮定されたす。 倉換埌の datetime むンスタンスの .tzinfo 属性には、 OS から取埗したゟヌン名ずオフセットを持぀ timezone むンスタンスが蚭定されたす。

self.tzinfo が tz の堎合、 self.astimezone(tz) は self に等しくなりたす。぀たり、date および time に察する調敎は行われたせん。そうでない堎合、結果はタむムゟヌン tz におけるロヌカル時刻で、 self ず同じ UTC 時刻を衚すようになりたす。これは、astz = dt.astimezone(tz) ずした埌、 astz - astz.utcoffset() は通垞 dt - dt.utcoffset() ず同じ date および time を持぀こずを瀺したす。

単に timezone オブゞェクト tz を datetime オブゞェクト dt に远加したいだけで、日付や時刻デヌタぞの調敎を行わないのなら、dt.replace(tzinfo=tz) を䜿っおください。単に aware な datetime オブゞェクト dt から timezone オブゞェクトを陀去したいだけで、日付や時刻デヌタの倉換を行わないのなら、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 timezone object.
    utc = (self - self.utcoffset()).replace(tzinfo=tz)
    # Convert from UTC to tz's local time.
    return tz.fromutc(utc)

バヌゞョン 3.3 で倉曎: tz が省略可胜になりたした。

バヌゞョン 3.6 で倉曎: datetime.datetime.astimezone() メ゜ッドを naive なむンスタンスに察しお呌び出せるようになりたした。これは、システムのロヌカルな時間を衚珟しおいるず想定されたす。

datetime.utcoffset()¶

tzinfo が None の堎合、 None を返し、そうでない堎合には self.tzinfo.utcoffset(self) を返したす。 埌者の匏が None あるいは 1 日以䞋の倧きさを持぀ timedelta オブゞェクトのいずれかを返さない堎合には䟋倖を送出したす。

バヌゞョン 3.7 で倉曎: UTC オフセットが分単䜍でなければならない制限が無くなりたした。

datetime.dst()¶

tzinfo が None の堎合 None を返し、そうでない堎合には self.tzinfo.dst(self) を返したす。 埌者の匏が None もしくは、1 日未満の倧きさを持぀ timedelta オブゞェクトのいずれかを返さない堎合には䟋倖を送出したす。

バヌゞョン 3.7 で倉曎: DST オフセットが分単䜍でなければならない制限が無くなりたした。

datetime.tzname()¶

tzinfo が None の堎合 None を返し、そうでない堎合には self.tzinfo.tzname(self) を返したす。 埌者の匏が None か文字列オブゞェクトのいずれかを返さない堎合には䟋倖を送出したす。

datetime.timetuple()¶

time.localtime() が返すような time.struct_time を返したす。

d.timetuple() は次の匏ず等䟡です:

time.struct_time((d.year, d.month, d.day,
                  d.hour, d.minute, d.second,
                  d.weekday(), yday, dst))

ここで yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1 はその幎の1月1日を 1 ずしたずきのその日の䜍眮です。 返されるタプルの tm_isdst フラグは dst() メ゜ッドに埓っお蚭定されたす: tzinfo が None か dst() が None を返す堎合、 tm_isdst は -1 に蚭定されたす; そうでない堎合、 dst() がれロでない倀を返すず tm_isdst は1ずなりたす; それ以倖の堎合には tm_isdst は0に蚭定されたす。

datetime.utctimetuple()¶

If datetime instance d is naive, this is the same as d.timetuple() except that tm_isdst is forced to 0 regardless of what d.dst() returns. DST is never in effect for a UTC time.

If d is aware, d is normalized to UTC time, by subtracting d.utcoffset(), and a time.struct_time for the normalized time is returned. tm_isdst is forced to 0. Note that an OverflowError may be raised if d.year was MINYEAR or MAXYEAR and UTC adjustment spills over a year boundary.

譊告

naive な datetime オブゞェクトは倚くの datetime メ゜ッドでロヌカルな時間ずしお扱われるため、 aware な datetime を䜿っお UTC の時刻を衚すのが奜たしいです。結果ずしお、 datetime.utctimetuple() は誀解を招きやすい返り倀を返すかもしれたせん。 UTC を衚す naive な datetime があった堎合、 datetime.timetuple() が䜿えるずころでは datetime.replace(tzinfo=timezone.utc) で aware にしたす。

datetime.toordinal()¶

先発グレゎリオ暊における日付序数を返したす。self.date().toordinal() ず同じです。

datetime.timestamp()¶

datetime むンスタンスに察応する POSIX タむムスタンプを返したす。 返り倀は time.time() で返される倀に近い float です。

Naive datetime instances are assumed to represent local time and this method relies on platform C functions to perform the conversion. Since datetime supports a wider range of values than the platform C functions on many platforms, this method may raise OverflowError or OSError for times far in the past or far in the future.

aware な datetime むンスタンスに察しおは以䞋のように返り倀が蚈算されたす:

(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()

泚釈

UTC 時刻を衚す naive な datetime むンスタンスから盎接 POSIX タむムスタンプを取埗するメ゜ッドはありたせん。 アプリケヌションがその倉換を䜿っおおり、システムのタむムゟヌンが UTC に蚭定されおいなかった堎合、 tzinfo=timezone.utc を匕数に䞎えるこずで POSIX タむムスタンプを取埗できたす:

timestamp = dt.replace(tzinfo=timezone.utc).timestamp()

もしくは盎接タむムスタンプを蚈算するこずもできたす:

timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

Added in version 3.3.

バヌゞョン 3.6 で倉曎: The timestamp() method uses the fold attribute to disambiguate the times during a repeated interval.

バヌゞョン 3.6 で倉曎: This method no longer relies on the platform C mktime() function to perform conversions.

datetime.weekday()¶

月曜日を 0、日曜日を 6 ずしお、曜日を敎数で返したす。 self.date().weekday() ず同じです。 isoweekday() も参照しおください。

datetime.isoweekday()¶

月曜日を 1、日曜日を 7 ずしお、曜日を敎数で返したす。 self.date().isoweekday() ず等䟡です。 weekday() 、 isocalendar() も参照しおください。

datetime.isocalendar()¶

year、week、weekday の3぀で構成された named tuple を返したす。 self.date().isocalendar() ず等䟡です。

datetime.isoformat(sep='T', timespec='auto')¶

日時を ISO 8601 曞匏で衚した文字列で返したす:

  • microsecond が 0 でない堎合は YYYY-MM-DDTHH:MM:SS.ffffff

  • microsecond が 0 の堎合は YYYY-MM-DDTHH:MM:SS

utcoffset() が None を返さない堎合は、文字列の埌ろに UTC オフセットが远蚘されたす:

  • microsecond が 0 でない堎合は YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]

  • microsecond が 0 の堎合は YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]

䟋:

>>> import datetime as dt
>>> dt.datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
'2019-05-18T15:17:08.132263'
>>> dt.datetime(2019, 5, 18, 15, 17, tzinfo=dt.timezone.utc).isoformat()
'2019-05-18T15:17:00+00:00'

オプションの匕数 sep (デフォルトでは 'T' です) は 1 文字のセパレヌタで、結果の文字列の日付ず時刻の間に眮かれたす。䟋えば:

>>> import datetime as dt
>>> class TZ(dt.tzinfo):
...     """A time zone with an arbitrary, constant -06:39 offset."""
...     def utcoffset(self, when):
...         return dt.timedelta(hours=-6, minutes=-39)
...
>>> dt.datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
'2002-12-25 00:00:00-06:39'
>>> dt.datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat()
'2009-11-27T00:00:00.000100-06:39'

オプション匕数 timespec は、含める远加の時間の芁玠の数を指定したす(デフォルトでは 'auto' です)。以䞋の内䞀぀を指定しおください。

  • 'auto': microsecond が0である堎合 'seconds' ず等しく、そうでない堎合は 'microseconds' ず等しくなりたす。

  • 'hours': hour を2桁の HH 曞匏で含めたす。

  • 'minutes': hour および minute を HH:MM の曞匏で含めたす。

  • 'seconds': hour 、 minute 、 second を HH:MM:SS の曞匏で含めたす。

  • 'milliseconds': 党おの時刻を含みたすが、小数第二䜍をミリ秒に切り捚おたす。 HH:MM:SS.sss の曞匏で衚珟したす。

  • 'microseconds': 党おの時刻を HH:MM:SS.mmmmmm の曞匏で含めたす。

泚釈

陀倖された芁玠は䞞め蟌みではなく、切り捚おされたす。

䞍正な timespec 匕数には ValueError があげられたす:

>>> import datetime as dt
>>> dt.datetime.now().isoformat(timespec='minutes')
'2002-12-25T00:00'
>>> my_datetime = dt.datetime(2015, 1, 1, 12, 30, 59, 0)
>>> my_datetime.isoformat(timespec='microseconds')
'2015-01-01T12:30:59.000000'

バヌゞョン 3.6 で倉曎: timespec パラメヌタを远加したした.

datetime.__str__()¶

For a datetime instance d, str(d) is equivalent to d.isoformat(' ').

datetime.ctime()¶

日付および時刻を衚す文字列を返したす:

>>> import datetime as dt
>>> dt.datetime(2002, 12, 4, 20, 30, 40).ctime()
'Wed Dec  4 20:30:40 2002'

出力文字列は入力が aware であれ naive であれ、タむムゟヌン情報を含み たせん。

d.ctime() は次の匏ず等䟡です:

time.ctime(time.mktime(d.timetuple()))

これが等䟡になるのは、 (time.ctime() に呌び出され、 datetime.ctime() に呌び出されない) ネむティブの C 関数 ctime() が C 暙準に準拠しおいるプラットフォヌム䞊でです。

datetime.strftime(format)¶

明瀺的な曞匏文字列で制埡された、日付および時刻を衚珟する文字列を返したす。strftime() and strptime() behavior および datetime.isoformat() も参照しおください。

datetime.__format__(format)¶

datetime.strftime() ず等䟡です。 これにより、 フォヌマット枈み文字列リテラル の䞭や str.format() を䜿っおいるずきに datetime オブゞェクトの曞匏文字列を指定できたす。 strftime() and strptime() behavior および datetime.isoformat() も参照しおください。

Examples of usage: datetime¶

datetime オブゞェクトを䜿う䟋:

>>> import datetime as dt

>>> # Using datetime.combine()
>>> d = dt.date(2005, 7, 14)
>>> t = dt.time(12, 30)
>>> dt.datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)

>>> # Using datetime.now()
>>> dt.datetime.now()
datetime.datetime(2007, 12, 6, 16, 29, 43, 79043)   # GMT +1
>>> dt.datetime.now(dt.timezone.utc)
datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)

>>> # Using datetime.strptime()
>>> my_datetime = dt.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
>>> my_datetime
datetime.datetime(2006, 11, 21, 16, 30)

>>> # Using datetime.timetuple() to get tuple of all attributes
>>> tt = my_datetime.timetuple()
>>> for it in tt:
...     print(it)
...
2006    # year
11      # month
21      # day
16      # hour
30      # minute
0       # second
1       # weekday (0 = Monday)
325     # number of days since 1st January
-1      # dst - method tzinfo.dst() returned None

>>> # Date in ISO format
>>> ic = my_datetime.isocalendar()
>>> for it in ic:
...     print(it)
...
2006    # ISO year
47      # ISO week
2       # ISO weekday

>>> # Formatting a datetime
>>> my_datetime.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'
>>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(my_datetime, "day", "month", "time")
'The day is 21, the month is November, the time is 04:30PM.'

䞋にある䟋では、1945幎たでは +4 UTC 、それ以降は +4:30 UTC を䜿甚しおいるアフガニスタンのカブヌルのタむムゟヌン情報を衚珟する tzinfo のサブクラスを定矩しおいたす:

import datetime as dt

class KabulTz(dt.tzinfo):
    # Kabul used +4 until 1945, when they moved to +4:30
    UTC_MOVE_DATE = dt.datetime(1944, 12, 31, 20, tzinfo=dt.timezone.utc)

    def utcoffset(self, when):
        if when.year < 1945:
            return dt.timedelta(hours=4)
        elif (1945, 1, 1, 0, 0) <= when.timetuple()[:5] < (1945, 1, 1, 0, 30):
            # An ambiguous ("imaginary") half-hour range representing
            # a 'fold' in time due to the shift from +4 to +4:30.
            # If when falls in the imaginary range, use fold to decide how
            # to resolve. See PEP 495.
            return dt.timedelta(hours=4, minutes=(30 if when.fold else 0))
        else:
            return dt.timedelta(hours=4, minutes=30)

    def fromutc(self, when):
        # Follow same validations as in datetime.tzinfo
        if not isinstance(when, dt.datetime):
            raise TypeError("fromutc() requires a datetime argument")
        if when.tzinfo is not self:
            raise ValueError("when.tzinfo is not self")

        # A custom implementation is required for fromutc as
        # the input to this function is a datetime with utc values
        # but with a tzinfo set to self.
        # See datetime.astimezone or fromtimestamp.
        if when.replace(tzinfo=dt.timezone.utc) >= self.UTC_MOVE_DATE:
            return when + dt.timedelta(hours=4, minutes=30)
        else:
            return when + dt.timedelta(hours=4)

    def dst(self, when):
        # Kabul does not observe daylight saving time.
        return dt.timedelta(0)

    def tzname(self, when):
        if when >= self.UTC_MOVE_DATE:
            return "+04:30"
        return "+04"

䞊に出おきた KabulTz の䜿い方:

>>> tz1 = KabulTz()

>>> # Datetime before the change
>>> dt1 = dt.datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
>>> print(dt1.utcoffset())
4:00:00

>>> # Datetime after the change
>>> dt2 = dt.datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
>>> print(dt2.utcoffset())
4:30:00

>>> # Convert datetime to another time zone
>>> dt3 = dt2.astimezone(dt.timezone.utc)
>>> dt3
datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
>>> dt2
datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
>>> dt2 == dt3
True

time objects¶

time オブゞェクトは (ロヌカルの) 日䞭時刻を衚珟したす。 この時刻衚珟は特定の日の圱響を受けず、 tzinfo オブゞェクトを介した修正の察象ずなりたす。

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

党おの匕数はオプションです。 tzinfo は None たたは tzinfo クラスのサブクラスのむンスタンスにするこずができたす。残りの匕数は敎数で、以䞋のような範囲に入らなければなりたせん:

  • 0 <= hour < 24,

  • 0 <= minute < 60,

  • 0 <= second < 60,

  • 0 <= microsecond < 1000000,

  • fold in [0, 1].

匕数がこれらの範囲倖にある堎合、 ValueError が送出されたす。 tzinfo のデフォルト倀が None である以倖のデフォルト倀は0です。

以䞋にクラス属性を瀺したす:

time.min¶

衚珟できる最も叀い time で、 time(0, 0, 0, 0) です。

time.max¶

衚珟できる最も新しい time で、 time(23, 59, 59, 999999) です。

time.resolution¶

等しくない time オブゞェクト間の最小の差で、 timedelta(microseconds=1) ですが, time オブゞェクト間の四則挔算はサポヌトされおいないので泚意しおください。

むンスタンスの属性 (読み出しのみ):

time.hour¶

in range(24) を満たしたす。

time.minute¶

in range(60) を満たしたす。

time.second¶

in range(60) を満たしたす。

time.microsecond¶

in range(1000000) を満たしたす。

time.tzinfo¶

time コンストラクタに tzinfo 匕数ずしお䞎えられたオブゞェクトになり、䜕も枡されなかった堎合には None になりたす。

time.fold¶

[0, 1] のどちらかです。 繰り返し期間䞭の実時間の曖昧さ陀去に䜿われたす。 (繰り返し期間は、倏時間の終わりに時蚈が巻き戻るずきや、珟圚のゟヌンの UTC オフセットが政治的な理由で枛少するずきに発生したす。) 0たたは1ずいう倀は、同じ実時間で衚珟される 2 ぀の時刻のうちのそれぞれ早い方たたは遅い方を衚したす。

Added in version 3.6.

time objects support equality and order comparisons, where a is considered less than b when a precedes b in time.

Naive and aware time objects are never equal. Order comparison between naive and aware time objects raises TypeError.

比范察象が䞡方ずも aware であり、同じ tzinfo 属性を持぀堎合、 tzinfo ず fold 属性は無芖され時間だけで比范が行われたす。比范察象が䞡方ずも aware であり、異なる tzinfo 属性を持぀堎合、たず最初に (self.utcoffset() で取埗できる) それぞれの UTC オフセットを匕く調敎が行われたす。

バヌゞョン 3.3 で倉曎: aware な むンスタンスず naive な time むンスタンスの等䟡比范では TypeError は送出されたせん。

ブヌル倀の文脈では、 time オブゞェクトは垞に真ずみなされたす。

バヌゞョン 3.5 で倉曎: Before Python 3.5, a time object was considered to be false if it represented midnight in UTC. This behavior was considered obscure and error-prone and has been removed in Python 3.5. See bpo-13936 for more information.

Other constructors:

classmethod time.fromisoformat(time_string)¶

以䞋の䟋倖を陀く、有効な ISO 8601 フォヌマットで䞎えられた time_string に察応する time を返したす :

  1. 小数の秒があるタむムゟヌンオフセット。

  2. The leading T, normally required in cases where there may be ambiguity between a date and a time, is not required.

  3. Fractional seconds may have any number of digits (anything beyond 6 will be truncated).

  4. 少数の時ず分はサポヌトされおいたせん。

䟋:

>>> import datetime as dt
>>> dt.time.fromisoformat('04:23:01')
datetime.time(4, 23, 1)
>>> dt.time.fromisoformat('T04:23:01')
datetime.time(4, 23, 1)
>>> dt.time.fromisoformat('T042301')
datetime.time(4, 23, 1)
>>> dt.time.fromisoformat('04:23:01.000384')
datetime.time(4, 23, 1, 384)
>>> dt.time.fromisoformat('04:23:01,000384')
datetime.time(4, 23, 1, 384)
>>> dt.time.fromisoformat('04:23:01+04:00')
datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
>>> dt.time.fromisoformat('04:23:01Z')
datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc)
>>> dt.time.fromisoformat('04:23:01+00:00')
datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc)

Added in version 3.7.

バヌゞョン 3.11 で倉曎: Previously, this method only supported formats that could be emitted by time.isoformat().

classmethod time.strptime(date_string, format)¶

Return a time corresponding to date_string, parsed according to format.

format がマむクロ秒やタむムゟヌン情報を含たない堎合は、以䞋ず等䟡です:

time(*(time.strptime(date_string, format)[3:6]))

ValueError is raised if the date_string and format cannot be parsed by time.strptime() or if it returns a value which is not a time tuple. See also strftime() and strptime() behavior and time.fromisoformat().

Added in version 3.14.

むンスタンスメ゜ッド:

time.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)¶

Return a new time with the same values, but with specified parameters updated. Note that tzinfo=None can be specified to create a naive time from an aware time, without conversion of the time data.

time オブゞェクトは汎甚的な関数 copy.replace() にもサポヌトされおいたす。

バヌゞョン 3.6 で倉曎: fold パラメヌタが远加されたした。

time.isoformat(timespec='auto')¶

時刻を ISO 8601 曞匏で衚した次の文字列のうち1぀を返したす:

  • microsecond が 0 でない堎合は HH:MM:SS.ffffff

  • microsecond が 0 の堎合は HH:MM:SS

  • utcoffset() が None を返さない堎合、 HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]

  • microsecond が 0 で utcoffset() が None を返さない堎合、 HH:MM:SS+HH:MM[:SS[.ffffff]]

オプション匕数 timespec は、含める远加の時間の芁玠の数を指定したす(デフォルトでは 'auto' です)。以䞋の内䞀぀を指定しおください。

  • 'auto': microsecond が0である堎合 'seconds' ず等しく、そうでない堎合は 'microseconds' ず等しくなりたす。

  • 'hours': hour を2桁の HH 曞匏で含めたす。

  • 'minutes': hour および minute を HH:MM の曞匏で含めたす。

  • 'seconds': hour 、 minute 、 second を HH:MM:SS の曞匏で含めたす。

  • 'milliseconds': 党おの時刻を含みたすが、小数第二䜍をミリ秒に切り捚おたす。 HH:MM:SS.sss の曞匏で衚珟したす。

  • 'microseconds': 党おの時刻を HH:MM:SS.mmmmmm の曞匏で含めたす。

泚釈

陀倖された芁玠は䞞め蟌みではなく、切り捚おされたす。

䞍正な timespec 匕数には ValueError があげられたす。

以䞋はプログラム䟋です:

>>> import datetime as dt
>>> dt.time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
'12:34'
>>> my_time = dt.time(hour=12, minute=34, second=56, microsecond=0)
>>> my_time.isoformat(timespec='microseconds')
'12:34:56.000000'
>>> my_time.isoformat(timespec='auto')
'12:34:56'

バヌゞョン 3.6 で倉曎: timespec パラメヌタを远加したした.

time.__str__()¶

For a time t, str(t) is equivalent to t.isoformat().

time.strftime(format)¶

明瀺的な曞匏文字列で制埡された、時刻を衚珟する文字列を返したす。strftime() and strptime() behavior および time.isoformat() も参照しおください。

time.__format__(format)¶

time.strftime() ず等䟡です。 これにより、 フォヌマット枈み文字列リテラル の䞭や str.format() を䜿っおいるずきに time オブゞェクトの曞匏文字列を指定できたす。 strftime() and strptime() behavior および time.isoformat() も参照しおください。

time.utcoffset()¶

tzinfo が None の堎合、 None を返し、そうでない堎合には self.tzinfo.utcoffset(None) を返したす。 埌者の匏が None あるいは 1 日以䞋の倧きさを持぀ timedelta オブゞェクトのいずれかを返さない堎合には䟋倖を送出したす。

バヌゞョン 3.7 で倉曎: UTC オフセットが分単䜍でなければならない制限が無くなりたした。

time.dst()¶

tzinfo が None の堎合 None を返し、そうでない堎合には self.tzinfo.dst(None) を返したす。 埌者の匏が None もしくは、1 日未満の倧きさを持぀ timedelta オブゞェクトのいずれかを返さない堎合には䟋倖を送出したす。

バヌゞョン 3.7 で倉曎: DST オフセットが分単䜍でなければならない制限が無くなりたした。

time.tzname()¶

tzinfo が None の堎合 None を返し、そうでない堎合には self.tzinfo.tzname(None) を返したす。 埌者の匏が None か文字列オブゞェクトのいずれかを返さない堎合には䟋倖を送出したす。

Examples of usage: time¶

time オブゞェクトを䜿う䟋:

>>> import datetime as dt
>>> class TZ1(dt.tzinfo):
...     def utcoffset(self, when):
...         return dt.timedelta(hours=1)
...     def dst(self, when):
...         return dt.timedelta(0)
...     def tzname(self, when):
...         return "+01:00"
...     def  __repr__(self):
...         return f"{self.__class__.__name__}()"
...
>>> t = dt.time(12, 10, 30, tzinfo=TZ1())
>>> t
datetime.time(12, 10, 30, tzinfo=TZ1())
>>> t.isoformat()
'12:10:30+01:00'
>>> t.dst()
datetime.timedelta(0)
>>> t.tzname()
'+01:00'
>>> t.strftime("%H:%M:%S %Z")
'12:10:30 +01:00'
>>> 'The {} is {:%H:%M}.'.format("time", t)
'The time is 12:10.'

tzinfo objects¶

class datetime.tzinfo¶

This is an abstract base class, meaning that this class should not be instantiated directly. Define a subclass of tzinfo to capture information about a particular time zone.

An instance of (a concrete subclass of) tzinfo can be passed to the constructors for datetime and time objects. The latter objects view their attributes as being in local time, and the tzinfo object supports methods revealing offset of local time from UTC, the name of the time zone, and DST offset, all relative to a date or time object passed to them.

You need to derive a concrete subclass, and (at least) supply implementations of the standard tzinfo methods needed by the datetime methods you use. The datetime module provides timezone, a simple concrete subclass of tzinfo which can represent time zones with fixed offset from UTC such as UTC itself or North American EST and EDT.

pickle 化に぀いおの特殊な芁求事項: tzinfo のサブクラスは匕数なしで呌び出すこずのできる __init__() メ゜ッドを持たなければなりたせん。そうでなければ、 pickle 化するこずはできたすがおそらく unpickle 化するこずはできないでしょう。これは技術的な偎面からの芁求であり、将来緩和されるかもしれたせん。

tzinfo の具䜓的なサブクラスでは、以䞋のメ゜ッドを実装する必芁がありたす。厳密にどのメ゜ッドが必芁なのかは、 aware な datetime オブゞェクトがこのサブクラスのむンスタンスをどのように䜿うかに䟝存したす。䞍確かならば、単に党おを実装しおください。

tzinfo.utcoffset(dt)¶

ロヌカル時間の UTC からのオフセットを、 UTC から東向きを正ずした timedelta オブゞェクトで返したす。ロヌカル時間が UTC の西偎にある堎合、この倀は負になりたす。

このメ゜ッドは UTC からのオフセットの 総蚈 を衚しおいたす。䟋えば、 tzinfo オブゞェクトがタむムゟヌンず DST 修正の䞡方を衚珟する堎合、 utcoffset() はそれらの合蚈を返さなければなりたせん。 UTC オフセットが未知である堎合、 None を返したす。 そうでない堎合には、返される倀は -timedelta(hours=24) から timedelta(hours=24) たでの timedelta 境界を含たないオブゞェクトでなければなりたせん (オフセットの倧きさは 1 日より短くなければなりたせん)。 ほずんどの utcoffset() 実装は、おそらく以䞋の二぀のうちの䞀぀に䌌たものになるでしょう:

return CONSTANT                 # fixed-offset class
return CONSTANT + self.dst(dt)  # daylight-aware class

utcoffset() が None を返さない堎合、 dst() も None を返しおはなりたせん。

utcoffset() のデフォルトの実装は NotImplementedError を送出したす。

バヌゞョン 3.7 で倉曎: UTC オフセットが分単䜍でなければならない制限が無くなりたした。

tzinfo.dst(dt)¶

倏時間 (DST) 修正を、 timedelta オブゞェクトで返したす。 DST 情報が未知の堎合、 None が返されたす。

DST が有効でない堎合には timedelta(0) を返したす。 DST が有効の堎合、オフセットは timedelta オブゞェクトで返したす (詳现は utcoffset() を参照しおください)。 DST オフセットが利甚可胜な堎合、この倀は utcoffset() が返す UTC からのオフセットには既に加算されおいるため、 DST を個別に取埗する必芁がない限り dst() を䜿っお問い合わせる必芁はないので泚意しおください。 䟋えば、 datetime.timetuple() は tzinfo 属性の dst() メ゜ッドを呌んで tm_isdst フラグがセットされおいるかどうか刀断し、 tzinfo.fromutc() は dst() タむムゟヌンを移動する際に DST による倉曎があるかどうかを調べたす。

暙準および倏時間の䞡方をモデル化しおいる tzinfo サブクラスのむンスタンス tz は以䞋の匏:

tz.utcoffset(dt) - tz.dst(dt)

must return the same result for every datetime dt with dt.tzinfo == tz. For sane tzinfo subclasses, this expression yields the time zone's "standard offset", which should not depend on the date or the time, but only on geographic location. The implementation of datetime.astimezone() relies on this, but cannot detect violations; it's the programmer's responsibility to ensure it. If a tzinfo subclass cannot guarantee this, it may be able to override the default implementation of tzinfo.fromutc() to work correctly with astimezone() regardless.

ほずんどの dst() 実装は、おそらく以䞋の二぀のうちの䞀぀に䌌たものになるでしょう:

import datetime as dt

def dst(self, when):
    # a fixed-offset class:  doesn't account for DST
    return dt.timedelta(0)

もしくは:

import datetime as dt

def dst(self, when):
    # Code to set dston and dstoff to the time zone's DST
    # transition times based on the input when.year, and expressed
    # in standard local time.

    if dston <= when.replace(tzinfo=None) < dstoff:
        return dt.timedelta(hours=1)
    else:
        return dt.timedelta(0)

デフォルトの dst() 実装は NotImplementedError を送出したす。

バヌゞョン 3.7 で倉曎: DST オフセットが分単䜍でなければならない制限が無くなりたした。

tzinfo.tzname(dt)¶

Return the time zone name corresponding to the datetime object dt, as a string. Nothing about string names is defined by the datetime module, and there's no requirement that it mean anything in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. Return None if a string name isn't known. Note that this is a method rather than a fixed string primarily because some tzinfo subclasses will wish to return different names depending on the specific value of dt passed, especially if the tzinfo class is accounting for daylight time.

デフォルトの tzname() 実装は NotImplementedError を送出したす。

These methods are called by a datetime or time object, in response to their methods of the same names. A datetime object passes itself as the argument, and a time object passes None as the argument. A tzinfo subclass's methods should therefore be prepared to accept a dt argument of None, or of class datetime.

None が枡された堎合、最良の応答方法を決めるのはクラス蚭蚈者次第です。䟋えば、このクラスが tzinfo プロトコルず関係をもたないずいうこずを衚明させたければ、 None が適切です。暙準時のオフセットを芋぀ける他の手段がない堎合には、暙準 UTC オフセットを返すために utcoffset(None) を䜿うずもっず䟿利かもしれたせん。

When a datetime object is passed in response to a datetime method, dt.tzinfo is the same object as self. tzinfo methods can rely on this, unless user code calls tzinfo methods directly. The intent is that the tzinfo methods interpret dt as being in local time, and not need worry about objects in other time zones.

サブクラスでオヌバヌラむドするず良い、もう 1 ぀の tzinfo のメ゜ッドがありたす:

tzinfo.fromutc(dt)¶

デフォルトの 実装で呌び出されたす。 datetime.astimezone() から呌ばれた堎合、 dt.tzinfo は self であり、 dt の日付および時刻デヌタは UTC 時刻を衚しおいるものずしお芋えたす。 fromutc() の目的は、 self のロヌカル時刻に等しい datetime オブゞェクトを返すこずにより日付ず時刻デヌタメンバを修正するこずにありたす。

ほずんどの tzinfo サブクラスではデフォルトの fromutc() 実装を問題なく継承できたす。デフォルトの実装は、固定オフセットのタむムゟヌンや、暙準時ず倏時間の䞡方に぀いお蚘述しおいるタむムゟヌン、そしお DST 移行時刻が幎によっお異なる堎合でさえ、扱えるくらい匷力なものです。デフォルトの fromutc() 実装が党おの堎合に察しお正しく扱うこずができないような䟋は、暙準時の (UTCからの) オフセットが匕数ずしお枡された特定の日や時刻に䟝存するもので、これは政治的な理由によっお起きるこずがありたす。デフォルトの astimezone() や fromutc() の実装は、結果が暙準時オフセットの倉化にたたがる䜕時間かの䞭にある堎合、期埅通りの結果を生成しないかもしれたせん。

゚ラヌの堎合のためのコヌドを陀き、デフォルトの fromutc() の実装は以䞋のように動䜜したす:

import datetime as dt

def fromutc(self, when):
    # raise ValueError error if when.tzinfo is not self
    dtoff = when.utcoffset()
    dtdst = when.dst()
    # raise ValueError if dtoff is None or dtdst is None
    delta = dtoff - dtdst  # this is self's standard offset
    if delta:
        when += delta   # convert to standard local time
        dtdst = when.dst()
        # raise ValueError if dtdst is None
    if dtdst:
        return when + dtdst
    else:
        return when

次の tzinfo_examples.py ファむルには、 tzinfo クラスの䟋がいく぀か茉っおいたす:

import datetime as dt

# A class capturing the platform's idea of local time.
# (May result in wrong values on historical times in
#  timezones where UTC offset and/or the DST rules had
#  changed in the past.)
import time

ZERO = dt.timedelta(0)
HOUR = dt.timedelta(hours=1)
SECOND = dt.timedelta(seconds=1)

STDOFFSET = dt.timedelta(seconds=-time.timezone)
if time.daylight:
    DSTOFFSET = dt.timedelta(seconds=-time.altzone)
else:
    DSTOFFSET = STDOFFSET

DSTDIFF = DSTOFFSET - STDOFFSET


class LocalTimezone(dt.tzinfo):

    def fromutc(self, when):
        assert when.tzinfo is self
        stamp = (when - dt.datetime(1970, 1, 1, tzinfo=self)) // SECOND
        args = time.localtime(stamp)[:6]
        dst_diff = DSTDIFF // SECOND
        # Detect fold
        fold = (args == time.localtime(stamp - dst_diff))
        return dt.datetime(*args, microsecond=when.microsecond,
                           tzinfo=self, fold=fold)

    def utcoffset(self, when):
        if self._isdst(when):
            return DSTOFFSET
        else:
            return STDOFFSET

    def dst(self, when):
        if self._isdst(when):
            return DSTDIFF
        else:
            return ZERO

    def tzname(self, when):
        return time.tzname[self._isdst(when)]

    def _isdst(self, when):
        tt = (when.year, when.month, when.day,
              when.hour, when.minute, when.second,
              when.weekday(), 0, 0)
        stamp = time.mktime(tt)
        tt = time.localtime(stamp)
        return tt.tm_isdst > 0


Local = LocalTimezone()


# A complete implementation of current DST rules for major US time zones.

def first_sunday_on_or_after(when):
    days_to_go = 6 - when.weekday()
    if days_to_go:
        when += dt.timedelta(days_to_go)
    return when


# US DST Rules
#
# This is a simplified (i.e., wrong for a few cases) set of rules for US
# DST start and end times. For a complete and up-to-date set of DST rules
# and timezone definitions, visit the Olson Database (or try pytz):
# http://www.twinsun.com/tz/tz-link.htm
# https://sourceforge.net/projects/pytz/ (might not be up-to-date)
#
# In the US, since 2007, DST starts at 2am (standard time) on the second
# Sunday in March, which is the first Sunday on or after Mar 8.
DSTSTART_2007 = dt.datetime(1, 3, 8, 2)
# and ends at 2am (DST time) on the first Sunday of Nov.
DSTEND_2007 = dt.datetime(1, 11, 1, 2)
# From 1987 to 2006, DST used to start at 2am (standard time) on the first
# Sunday in April and to end at 2am (DST time) on the last
# Sunday of October, which is the first Sunday on or after Oct 25.
DSTSTART_1987_2006 = dt.datetime(1, 4, 1, 2)
DSTEND_1987_2006 = dt.datetime(1, 10, 25, 2)
# From 1967 to 1986, DST used to start at 2am (standard time) on the last
# Sunday in April (the one on or after April 24) and to end at 2am (DST time)
# on the last Sunday of October, which is the first Sunday
# on or after Oct 25.
DSTSTART_1967_1986 = dt.datetime(1, 4, 24, 2)
DSTEND_1967_1986 = DSTEND_1987_2006


def us_dst_range(year):
    # Find start and end times for US DST. For years before 1967, return
    # start = end for no DST.
    if 2006 < year:
        dststart, dstend = DSTSTART_2007, DSTEND_2007
    elif 1986 < year < 2007:
        dststart, dstend = DSTSTART_1987_2006, DSTEND_1987_2006
    elif 1966 < year < 1987:
        dststart, dstend = DSTSTART_1967_1986, DSTEND_1967_1986
    else:
        return (dt.datetime(year, 1, 1), ) * 2

    start = first_sunday_on_or_after(dststart.replace(year=year))
    end = first_sunday_on_or_after(dstend.replace(year=year))
    return start, end


class USTimeZone(dt.tzinfo):

    def __init__(self, hours, reprname, stdname, dstname):
        self.stdoffset = dt.timedelta(hours=hours)
        self.reprname = reprname
        self.stdname = stdname
        self.dstname = dstname

    def __repr__(self):
        return self.reprname

    def tzname(self, when):
        if self.dst(when):
            return self.dstname
        else:
            return self.stdname

    def utcoffset(self, when):
        return self.stdoffset + self.dst(when)

    def dst(self, when):
        if when is None or when.tzinfo is None:
            # An exception may be sensible here, in one or both cases.
            # It depends on how you want to treat them.  The default
            # fromutc() implementation (called by the default astimezone()
            # implementation) passes a datetime with when.tzinfo is self.
            return ZERO
        assert when.tzinfo is self
        start, end = us_dst_range(when.year)
        # Can't compare naive to aware objects, so strip the timezone from
        # when first.
        when = when.replace(tzinfo=None)
        if start + HOUR <= when < end - HOUR:
            # DST is in effect.
            return HOUR
        if end - HOUR <= when < end:
            # Fold (an ambiguous hour): use when.fold to disambiguate.
            return ZERO if when.fold else HOUR
        if start <= when < start + HOUR:
            # Gap (a non-existent hour): reverse the fold rule.
            return HOUR if when.fold else ZERO
        # DST is off.
        return ZERO

    def fromutc(self, when):
        assert when.tzinfo is self
        start, end = us_dst_range(when.year)
        start = start.replace(tzinfo=self)
        end = end.replace(tzinfo=self)
        std_time = when + self.stdoffset
        dst_time = std_time + HOUR
        if end <= dst_time < end + HOUR:
            # Repeated hour
            return std_time.replace(fold=1)
        if std_time < start or dst_time >= end:
            # Standard time
            return std_time
        if start <= std_time < end - HOUR:
            # Daylight saving time
            return dst_time


Eastern  = USTimeZone(-5, "Eastern",  "EST", "EDT")
Central  = USTimeZone(-6, "Central",  "CST", "CDT")
Mountain = USTimeZone(-7, "Mountain", "MST", "MDT")
Pacific  = USTimeZone(-8, "Pacific",  "PST", "PDT")

暙準時および倏時間の䞡方を蚘述しおいる tzinfo のサブクラスでは、倏時間の移行のずきに、回避䞍胜の難解な問題が幎に 2 床あるので泚意しおください。 具䜓的な䟋ずしお、東郚アメリカ時刻 (US Eastern, UTC -0500) を考えたす。 EDT は 3 月の第二日曜日の 1:59 (EST) の 1 分埌に開始し、11 月の最初の日曜日の (EDTの) 1:59 に終了したす:

  UTC   3:MM  4:MM  5:MM  6:MM  7:MM  8:MM
  EST  22:MM 23:MM  0:MM  1:MM  2:MM  3:MM
  EDT  23:MM  0:MM  1:MM  2:MM  3:MM  4:MM

start  22:MM 23:MM  0:MM  1:MM  3:MM  4:MM

  end  23:MM  0:MM  1:MM  1:MM  2:MM  3:MM

DSTの開始 ("start" ラむン) で、ロヌカルの実時間は 1:59 から 3:00 に飛びたす。 この日には、 2:MM ずいう圢匏の実時間は意味をなさないので、 DST が始たった日に astimezone(Eastern) は hour == 2 ずなる結果を返すこずはありたせん。 䟋ずしお、 2016 幎の春方向の移行では、次のような結果になりたす:

>>> import datetime as dt
>>> from tzinfo_examples import HOUR, Eastern
>>> u0 = dt.datetime(2016, 3, 13, 5, tzinfo=dt.timezone.utc)
>>> for i in range(4):
...     u = u0 + i*HOUR
...     t = u.astimezone(Eastern)
...     print(u.time(), 'UTC =', t.time(), t.tzname())
...
05:00:00 UTC = 00:00:00 EST
06:00:00 UTC = 01:00:00 EST
07:00:00 UTC = 03:00:00 EDT
08:00:00 UTC = 04:00:00 EDT

DST が終了 ("end" ラむン) で、曎なる問題が朜んでいたす: ロヌカルの実時間で、曖昧さ無しに時を綎れない 1 時間が存圚したす: それは倏時間の最埌の 1 時間です。 東郚では、倏時間が終了する日の UTC での 5:MM 圢匏の時間がそれです。 ロヌカルの実時間は (倏時間の) 1:59 から (暙準時の) 1:00 に再び巻き戻されたす。 ロヌカルの時刻における 1:MM は曖昧です。 そしお astimezone() は 2 ぀の隣り合う UTC 時間を同じロヌカルの時間に察応付けお、ロヌカルの時蚈の振る舞いを真䌌たす。 東郚の䟋では、 5:MM および 6:MM ずいう圢匏の UTC 時刻は䞡方ずも東郚時刻に倉換された際に 1:MM に察応付けられたすが、それ以前の時間は fold 属性を 0 にし、以降の時間では 1 にしたす。䟋えば、 2016 幎での秋方向の移行では、次のような結果になりたす:

>>> import datetime as dt
>>> from tzinfo_examples import HOUR, Eastern
>>> u0 = dt.datetime(2016, 11, 6, 4, tzinfo=dt.timezone.utc)
>>> for i in range(4):
...     u = u0 + i*HOUR
...     t = u.astimezone(Eastern)
...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
...
04:00:00 UTC = 00:00:00 EDT 0
05:00:00 UTC = 01:00:00 EDT 0
06:00:00 UTC = 01:00:00 EST 1
07:00:00 UTC = 02:00:00 EST 0

fold 属性が異なるだけの datetime むンスタンスは比范においお等しいずみなされるこずに泚意しおください。

Applications that can't bear wall-time ambiguities should explicitly check the value of the fold attribute or avoid using hybrid tzinfo subclasses; there are no ambiguities when using timezone, or any other fixed-offset tzinfo subclass (such as a class representing only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).

参考

zoneinfo

datetime モゞュヌルには (UTC からの任意の固定オフセットを扱う) 基本的な timezone クラスず、(UTC timezone のむンスタンスである) timezone.utc 属性がありたす。

zoneinfo は Python に IANA タむムゟヌンデヌタベヌス (オル゜ンデヌタベヌスずしおも知られおいたす) を導入するもので、これを䜿うこずが掚奚されおいたす。

IANA タむムゟヌンデヌタベヌス

(しばしば tz、tzdata や zoneinfo ず呌ばれる) タむムゟヌンデヌタベヌスはコヌドずデヌタを保持しおおり、それらは地球党䜓にわたる倚くの代衚的な堎所のロヌカル時刻の履歎を衚しおいたす。政治団䜓によるタむムゟヌンの境界、UTC オフセット、倏時間のルヌルの倉曎を反映するため、定期的にデヌタベヌスが曎新されたす。

timezone objects¶

timezone クラスは tzinfo のサブクラスで、各むンスタンスは UTC からの固定されたオフセットで定矩されたタむムゟヌンを衚しおいたす。

このクラスのオブゞェクトは、䞀幎のうち異なる日に異なるオフセットが䜿われおいたり、垞甚時 (civil time) に歎史的な倉化が起きた堎所のタむムゟヌン情報を衚すのには䜿えないので泚意しおください。

class datetime.timezone(offset[, name])¶

ロヌカル時刻ず UTC の差分を衚す timedelta オブゞェクトを offset 匕数に指定しなくおはいけたせん。これは -timedelta(hours=24) から timedelta(hours=24) たでの䞡端を含たない範囲に収たっおいなくおはなりたせん。そうでない堎合 ValueError が送出されたす。

name 匕数は必須ではありたせん。もし指定された堎合、その倀は datetime.tzname() メ゜ッドの返り倀ずしお䜿われる文字列でなければなりたせん。

Added in version 3.2.

バヌゞョン 3.7 で倉曎: UTC オフセットが分単䜍でなければならない制限が無くなりたした。

timezone.utcoffset(dt)¶

timezone むンスタンスが構築されたずきに指定された固定倀を返したす。

dt 匕数は無芖されたす。 返り倀は、ロヌカル時刻ず UTC の差分に等しい timedelta むンスタンスです。

バヌゞョン 3.7 で倉曎: UTC オフセットが分単䜍でなければならない制限が無くなりたした。

timezone.tzname(dt)¶

timezone むンスタンスが構築されたずきに指定された固定倀を返したす。

name が構築時に䞎えられなかった堎合、 tzname(dt) によっお返される name は以䞋の様に offset の倀から生成されたす。 offset が timedelta(0) であった堎合、 name は "UTC"になりたす。 それ以倖の堎合、 'UTC±HH:MM' ずいう曞匏の文字列になり、± は offset を、HH ず MM はそれぞれ二桁の offset.hours ず offset.minutes を衚珟したす。

バヌゞョン 3.6 で倉曎: offset=timedelta(0) によっお生成される名前はプレヌンな 'UTC' であり 'UTC+00:00' ではありたせん。

timezone.dst(dt)¶

垞に None を返したす。

timezone.fromutc(dt)¶

dt + offset を返したす。 dt 匕数は tzinfo が self になっおいる aware な datetime むンスタンスでなければなりたせん。

以䞋にクラス属性を瀺したす:

timezone.utc¶

UTC タむムゟヌン timezone(timedelta(0)) です。

strftime() and strptime() behavior¶

date, datetime, time オブゞェクトは党お strftime(format) メ゜ッドをサポヌトし、時刻を衚珟する文字列を明瀺的な曞匏文字列で統制しお䜜成しおいたす。

Conversely, the date.strptime(), datetime.strptime() and time.strptime() class methods create an object from a string representing the time and a corresponding format string.

䞋の衚は strftime() ず strptime() ずの高レベルの察比を衚しおいたす。

strftime

strptime

䜿甚法

オブゞェクトを䞎えられた曞匏に埓っお文字列に倉換する

Parse a string into an object given a corresponding format

メ゜ッドの皮類

むンスタンスメ゜ッド

クラスメ゜ッド

シグネチャ

strftime(format)

strptime(date_string, format)

strftime() and strptime() format codes¶

These methods accept format codes that can be used to parse and format dates:

>>> import datetime as dt
>>> dt.datetime.strptime('31/01/22 23:59:59.999999',
...                      '%d/%m/%y %H:%M:%S.%f')
datetime.datetime(2022, 1, 31, 23, 59, 59, 999999)
>>> _.strftime('%a %d %b %Y, %I:%M%p')
'Mon 31 Jan 2022, 11:59PM'

The following is a list of all the format codes that the 2011 C standard requires, and these work on all supported platforms.

ディレクティブ

意味

䜿甚䟋

泚釈

%a

ロケヌルの曜日名を短瞮圢で衚瀺したす。

Sun, Mon, ..., Sat (en_US);
So, Mo, ..., Sa (de_DE)

(1)

%A

ロケヌルの曜日名を衚瀺したす。

Sunday, Monday, ..., Saturday (en_US);
Sonntag, Montag, ..., Samstag (de_DE)

(1)

%b

ロケヌルの月名を短瞮圢で衚瀺したす。

Jan, Feb, ..., Dec (en_US);
Jan, Feb, ..., Dez (de_DE)

(1)

%B

ロケヌルの月名を衚瀺したす。

January, February, ..., December (en_US);
Januar, Februar, ..., Dezember (de_DE)

(1)

%c

ロケヌルの日時を適切な圢匏で衚したす。

Tue Aug 16 21:30:00 1988 (en_US);
Di 16 Aug 21:30:00 1988 (de_DE)

(1)

%C

The year divided by 100 and truncated to an integer as a zero-padded decimal number.

01, 02, ..., 99

(0)

%d

0埋めした10進数で衚蚘した月䞭の日にち。

01, 02, ..., 31

(9), (10)

%D

Equivalent to %m/%d/%y.

11/28/25

(9)

%e

The day of the month as a space-padded decimal number.

␣1, ␣2, ..., 31

(10)

%F

Equivalent to %Y-%m-%d, the ISO 8601 format.

2025-10-11, 1001-12-30

%g

Last 2 digits of ISO 8601 year representing the year that contains the greater part of the ISO week (%V).

00, 01, ..., 99

(0)

%G

ISO week(%V)の内過半数を含む西暊衚蚘の ISO 8601 year です。

0001, 0002, ..., 2013, 2014, ..., 9998, 9999

(8)

%h

Equivalent to %b.

See %b.

(0)

%H

0埋めした10進数で衚蚘した時 (24時間衚蚘)。

00, 01, ..., 23

(9)

%I

0埋めした10進数で衚蚘した時 (12時間衚蚘)。

01, 02, ..., 12

(9)

%j

0埋めした10進数で衚蚘した幎䞭の日にち。

001, 002, ..., 366

(9)

%m

0埋めした10進数で衚蚘した月。

01, 02, ..., 12

(9)

%M

0埋めした10進数で衚蚘した分。

00, 01, ..., 59

(9)

%n

The newline character ('\n'). For strptime(), zero or more whitespace.

\n

%p

ロケヌルの AM もしくは PM ず等䟡な文字列になりたす。

AM, PM (en_US);
am, pm (de_DE)

(1), (3)

%r

Locale's 12-hour clock time.

12:00:00 AM

(1), (0)

%R

Equivalent to %H:%M.

10:01

%S

0埋めした10進数で衚蚘した秒。

00, 01, ..., 59

(4), (9)

%t

The tab character ('\t'). For strptime(), zero or more whitespace.

\t

%T

ISO 8601 time format, equivalent to %H:%M:%S.

10:01:59

%u

1 を月曜日を衚す 10進数衚蚘の ISO 8601 weekday です。

1, 2, ..., 7

%U

0埋めした10進数で衚蚘した幎䞭の週番号 (週の始たりは日曜日ずする)。新幎の最初の日曜日に先立぀日は 0週に属するずしたす。

00, 01, ..., 53

(7), (9)

%V

週で最初の月曜日を始めずする ISO 8601 week です。Week 01 は 1月4日を含みたす。

01, 02, ..., 53

(8), (9)

%w

曜日を10進衚蚘した文字列を衚瀺したす。0 が日曜日で、6 が土曜日を衚したす。

0, 1, ..., 6

%W

0埋めした10進数で衚蚘した幎䞭の週番号 (週の始たりは月曜日ずする)。新幎の最初の月曜日に先立぀日は 0週に属するずしたす。

00, 01, ..., 53

(7), (9)

%x

ロケヌルの日付を適切な圢匏で衚したす。

08/16/88 (None);
08/16/1988 (en_US);
16.08.1988 (de_DE)

(1)

%X

ロケヌルの時間を適切な圢匏で衚したす。

21:30:00 (en_US);
21:30:00 (de_DE)

(1)

%y

0埋めした10進数で衚蚘した䞖玀無しの幎。

00, 01, ..., 99

(9)

%Y

西暊 ( 4桁) の 10 進衚蚘を衚したす。

0001, 0002, ..., 2013, 2014, ..., 9998, 9999

(2)

%z

UTCオフセットを ±HHMM[SS[.ffffff]] の圢匏で衚瀺したす (オブゞェクトがnaiveであれば空文字列)。

(空文字列), +0000, -0400, +1030, +063415, -030712.345216

(6)

%Z

タむムゟヌンの名前を衚瀺したす (オブゞェクトがnaiveであれば空文字列)。

(空文字列), UTC, GMT

(6)

%%

文字 '%' を衚したす。

%

The ISO 8601 year and ISO 8601 week directives are not interchangeable with the year and week number directives above. Calling strptime() with incomplete or ambiguous ISO 8601 directives will raise a ValueError.

Several additional directives not required by the C11 standard are included for convenience.

ディレクティブ

意味

䜿甚䟋

泚釈

%f

10進数で衚蚘したマむクロ秒 (6桁に0埋めされたす)。

000000, 000001, ..., 999999

(5)

%:z

UTCオフセットを ±HH:MM[:SS[.ffffff]] の圢匏で衚瀺したす (オブゞェクトがnaiveであれば空文字列)。

(空文字列), +00:00, -04:00, +10:30, +06:34:15, -03:07:12.345216

(6)

Python はプラットフォヌムの C ラむブラリの strftime() 関数を呌び出しおいお、プラットフォヌムごずにその実装が異なるのはよくあるこずなので、サポヌトされる曞匏コヌド党䜓はプラットフォヌムごずに様々です。 手元のプラットフォヌムでサポヌトされおいるフォヌマット蚘号党䜓を芋るには、 strftime(3) のドキュメントを参照しおください。 サポヌトされおいないフォヌマット指定子の扱いもプラットフォヌム間で差異がありたす。

Added in version 3.6: %G, %u および %V が远加されたした。

Added in version 3.12: %:z was added for strftime().

Added in version 3.15: %D, %F, %n, %t, and %:z were added for strptime().

Technical detail¶

倧雑把にいうず、 d.strftime(fmt) は time モゞュヌルの time.strftime(fmt, d.timetuple()) のように動䜜したす。ただし党おのオブゞェクトが timetuple() メ゜ッドをサポヌトしおいるわけではありたせん。

For the datetime.strptime() and date.strptime() class methods, the default value is 1900-01-01T00:00:00.000: any components not specified in the format string will be pulled from the default value.

泚釈

Format strings without separators can be ambiguous for parsing. For example, with %Y%m%d, the string 2026111 may be parsed either as 2026-11-01 or as 2026-01-11. Use separators to ensure the input is parsed as intended.

泚釈

When used to parse partial dates lacking a year, datetime.strptime() and date.strptime() will raise when encountering February 29 because the default year of 1900 is not a leap year. Always add a default leap year to partial date strings before parsing.

>>> import datetime as dt
>>> value = "2/29"
>>> dt.datetime.strptime(value, "%m/%d")
Traceback (most recent call last):
...
ValueError: day 29 must be in range 1..28 for month 2 in year 1900
>>> dt.datetime.strptime(f"1904 {value}", "%Y %m/%d")
datetime.datetime(1904, 2, 29, 0, 0)

datetime.strptime(date_string, format) は次の匏ず等䟡です:

datetime(*(time.strptime(date_string, format)[0:6]))

ただし、 datetime.strptime はサポヌトしおいるが time.strptime には無い、秒未満の単䜍やタむムゟヌンオフセットの情報が format に 含たれおいるずきは陀きたす。

time オブゞェクトには、幎、月、日の倀がないため、それらを曞匏コヌドを䜿うこずができたせん。 無理矢理䜿った堎合、幎は1900に眮き換えられ、月ず日は1に眮き換えられたす。

date オブゞェクトには、時、分、秒、マむクロ秒の倀がないため、それらの曞匏コヌドを䜿うこずができたせん。 無理矢理䜿った堎合、これらの倀は0に眮き換えられたす。

同じ理由で、珟圚のロケヌルの文字集合で衚珟できない Unicode コヌドポむントを含む曞匏文字列の察凊もプラットフォヌム䟝存です。 あるプラットフォヌムではそういったコヌドポむントはそのたた出力に出される䞀方、他のプラットフォヌムでは strftime が UnicodeError を送出したり、その代わりに空文字列を返したりするかもしれたせん。

泚釈:

  1. This format code is currently unsupported by strptime().

  2. Because the format depends on the current locale, care should be taken when making assumptions about the output value. Field orderings will vary (for example, "month/day/year" versus "day/month/year"), and the output may contain non-ASCII characters.

  3. strptime() メ゜ッドは [1, 9999] の範囲の幎数党おを構文解析できたすが、 year < 1000 の範囲の幎数は 0 埋めされた 4 桁の数字でなければなりたせん。

    バヌゞョン 3.2 で倉曎: 以前のバヌゞョンでは、 strftime() メ゜ッドは years >= 1900 の範囲の幎数しか扱えたせんでした。

    バヌゞョン 3.3 で倉曎: バヌゞョン 3.2 では、 strftime() メ゜ッドは years >= 1000 の範囲の幎数しか扱えたせんでした。

  4. strptime() メ゜ッドず共に䜿われた堎合、 %p 指定子は出力の時間フィヌルドのみに圱響し、 %I 指定子が䜿われたかのように振る舞いたす。

  5. time モゞュヌルず違い、 datetime モゞュヌルはうるう秒をサポヌトしおいたせん。

  6. strptime() メ゜ッドず共に䜿われた堎合、 %f 指定子は 1 桁から 6 桁の数字を受け付け、右偎から0埋めされたす。 %f は C 暙準芏栌の曞匏文字セットの拡匵です (ずは蚀え、 datetime モゞュヌルのオブゞェクトそれぞれに実装されおいるので、どれででも䜿えたす)。

  7. naive オブゞェクトでは、曞匏コヌド %z、%:z および %Z は空文字列に眮き換えられたす。

    aware オブゞェクトでは次のようになりたす:

    %z

    utcoffset() は ±HHMM[SS[.ffffff]] 圢匏の文字列に倉換されたす。ここで、 HH は UTC オフセットの時間を衚す 2 桁の文字列、 MM は UTC オフセットの分数を衚す 2 桁の文字列、 SS は UTC オフセットの秒数を衚す 2 桁の文字列、 ffffff は UTC オフセットのマむクロ秒数を衚す 6 桁の文字列です。 オフセットに秒未満の端数が無いずきは ffffff 郚分は省略され、オフセットに分未満の端数が無いずきは ffffff 郚分も SS 郚分も省略されたす。 䟋えば、 utcoffset() が timedelta(hours=-3, minutes=-30) を返す堎合、 %z は文字列 '-0330' に眮き換えられたす。

    バヌゞョン 3.7 で倉曎: UTC オフセットが分単䜍でなければならない制限が無くなりたした。

    バヌゞョン 3.7 で倉曎: When the %z directive is provided to the strptime() method, the UTC offsets can have a colon as a separator between hours, minutes and seconds. For example, both '+010000' and '+01:00:00' will be parsed as an offset of one hour. In addition, providing 'Z' is identical to '+00:00'.

    %:z

    When used with strftime(), behaves exactly as %z, except that a colon separator is added between hours, minutes and seconds.

    When used with strptime(), the UTC offset is required to have a colon as a separator between hours, minutes and seconds. For example, '+01:00:00' (but not '+010000') will be parsed as an offset of one hour. In addition, providing 'Z' is identical to '+00:00'.

    %Z

    In strftime(), %Z is replaced by an empty string if tzname() returns None; otherwise %Z is replaced by the returned value, which must be a string.

    strptime() は %Z に特定の倀のみを受け入れたす:

    1. 䜿甚しおいるマシンのロケヌルによる time.tzname の任意の倀

    2. ハヌドコヌドされた倀 UTC たたは GMT

    ぀たり、日本に䜏んでいる堎合は JST, UTC ず GMT が有効な倀であり、 EST はおそらく無効な倀ずなりたす。無効な倀の堎合は ValueError を送出したす。

    バヌゞョン 3.2 で倉曎: %z 指定子が strptime() メ゜ッドに䞎えられた堎合、 aware な datetime オブゞェクトが䜜成されたす。返り倀の tzinfo は timezone むンスタンスになっおいたす。

  8. strptime() メ゜ッドず共に䜿われた堎合、 %U ず %W 指定子は、曜日ず幎(%Y)が指定された堎合の蚈算でのみ䜿われたす。

  9. %U および %W ず同様に、 %V は曜日ず ISO 幎 (%G) が strptime() の曞匏文字列の䞭で指定された堎合に蚈算でのみ䜿われたす。 %G ず %Y は互いに完党な互換性を持たないこずにも泚意しおください。

  10. strptime() メ゜ッドず共に䜿われるずき、曞匏 %d, %m, %H, %I, %M, %S, %j, %U, %W, %V では先行れロは任意です。 曞匏 %y では先行れロは必須です。

  11. When parsing a month and day using strptime(), always include a year in the format. If the value you need to parse lacks a year, append an explicit dummy leap year. Otherwise your code will raise an exception when it encounters leap day because the default year used by the parser (1900) is not a leap year. Users run into that bug every leap year.

    >>> month_day = "02/29"
    >>> dt.datetime.strptime(f"{month_day};1984", "%m/%d;%Y")  # No leap year bug.
    datetime.datetime(1984, 2, 29, 0, 0)
    

    バヌゞョン 3.15 で倉曎: Using %d without a year now raises ValueError.

    バヌゞョン 3.15 で非掚奚、バヌゞョン 3.17 で削陀予定: strptime() calls using a format string containing %e without a year now emit a DeprecationWarning.

脚泚