uTools-Manuals/docs/python/datetime.html
2019-04-21 11:50:48 +08:00

419 lines
271 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-datetime"><h1><span class="yiyi-st" id="yiyi-10">8.1. <a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a> — 基本日期和时间类型</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/datetime.py">Lib/datetime.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>模块提供处理日期和时间的类,既有简单的方式又有复杂的方式。</span><span class="yiyi-st" id="yiyi-13">虽然支持日期和时间算法,但实现的重点是为输出格式化和操作提供高效的属性提取。</span><span class="yiyi-st" id="yiyi-14">有关相关功能,另请参阅<a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal"><span class="pre">time</span></code></a><a class="reference internal" href="calendar.html#module-calendar" title="calendar: Functions for working with calendars, including some emulation of the Unix cal program."><code class="xref py py-mod docutils literal"><span class="pre">calendar</span></code></a>模块。</span></p><p><span class="yiyi-st" id="yiyi-15">有两种日期和时间对象“naive”和“aware”。</span></p><p><span class="yiyi-st" id="yiyi-16">aware 对象具有关于应用规则和时间调整的充分的信息例如时区和夏令时信息来定位相对其他aware 对象的位置。</span><span class="yiyi-st" id="yiyi-17">aware 对象用于表示时间的一个特定的时刻,它是明确无二的。 <a class="footnote-reference" href="#id2" id="id1">[1]</a>.</span></p><p><span class="yiyi-st" id="yiyi-18">Naive对象不包含足够的信息来明确地确定其本身相对于其它日期/时间对象的偏移。</span><span class="yiyi-st" id="yiyi-19">一个naive对象表示的是协调世界时UTC、本地时间还是某些其它时区的时间完全取决于程序就像某个特定数字对程序是代表米、英里还是质量一样。</span><span class="yiyi-st" id="yiyi-20">Naive对象很容易理解和使用代价是忽视某些现实因素。</span></p><p><span class="yiyi-st" id="yiyi-21">对于需要aware对象的应用程序<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象具有可选的时区信息属性<code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code>,可以设置为抽象<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>类的子类的一个实例。</span><span class="yiyi-st" id="yiyi-22">这些<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>对象从UTC时间时区名称和夏令时是否生效获得偏移量信息。</span><span class="yiyi-st" id="yiyi-23">请注意,<a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>模块只提供一个具体的<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>类叫<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>类。</span><span class="yiyi-st" id="yiyi-24"><a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>类可以用与UTC固定的偏移表示简单的时区例如UTC本身或北美EST和EDT时区。</span><span class="yiyi-st" id="yiyi-25">支持更深层细节的时区取决于应用程序。</span><span class="yiyi-st" id="yiyi-26">世界各地的时间调整规则更加具有政治色彩而不是合乎理性且经常变化除了UTC之外没有适合于每个应用的标准。</span></p><p><span class="yiyi-st" id="yiyi-27"><a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>模块导出以下常量:</span></p><dl class="data"><dt id="datetime.MINYEAR"><span class="yiyi-st" id="yiyi-28"> <code class="descclassname">datetime.</code><code class="descname">MINYEAR</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-29"><a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象中允许的最小年份。</span><span class="yiyi-st" id="yiyi-30"><a class="reference internal" href="#datetime.MINYEAR" title="datetime.MINYEAR"><code class="xref py py-const docutils literal"><span class="pre">MINYEAR</span></code></a><code class="docutils literal"><span class="pre">1</span></code></span></p></dd></dl><dl class="data"><dt id="datetime.MAXYEAR"><span class="yiyi-st" id="yiyi-31"> <code class="descclassname">datetime.</code><code class="descname">MAXYEAR</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象中允许的最大年份数。</span><span class="yiyi-st" id="yiyi-33"><a class="reference internal" href="#datetime.MAXYEAR" title="datetime.MAXYEAR"><code class="xref py py-const docutils literal"><span class="pre">MAXYEAR</span></code></a><code class="docutils literal"><span class="pre">9999</span></code></span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-34">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-35">模块<a class="reference internal" href="calendar.html#module-calendar" title="calendar: Functions for working with calendars, including some emulation of the Unix cal program."><code class="xref py py-mod docutils literal"><span class="pre">calendar</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-36">日历相关的一般函数。</span></dd><dt><span class="yiyi-st" id="yiyi-37">模块<a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal"><span class="pre">time</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-38">时间访问和转化。</span></dd></dl></div><div class="section" id="available-types"><h2><span class="yiyi-st" id="yiyi-39">8.1.1. </span><span class="yiyi-st" id="yiyi-40">可用类型</span></h2><dl class="class"><dt><span class="yiyi-st" id="yiyi-41"><em class="property">class</em> <code class="descclassname">datetime.</code> <code class="descname">date</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-42">一个理想化的naive日期假设当前的公历总是并将永远是有效的。</span><span class="yiyi-st" id="yiyi-43">属性:<a class="reference internal" href="#datetime.date.year" title="datetime.date.year"><code class="xref py py-attr docutils literal"><span class="pre">year</span></code></a><a class="reference internal" href="#datetime.date.month" title="datetime.date.month"><code class="xref py py-attr docutils literal"><span class="pre">month</span></code></a><a class="reference internal" href="#datetime.date.day" title="datetime.date.day"><code class="xref py py-attr docutils literal"><span class="pre">day</span></code></a></span></p></dd></dl><dl class="class"><dt><span class="yiyi-st" id="yiyi-44"><em class="property">class</em> <code class="descclassname">datetime.</code> <code class="descname">time</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-45">一个理想化的时间独立于任何特定的日子假设每天有24 * 60 * 60秒这里没有“闰秒”的概念</span><span class="yiyi-st" id="yiyi-46">属性:<a class="reference internal" href="#datetime.time.hour" title="datetime.time.hour"><code class="xref py py-attr docutils literal"><span class="pre">hour</span></code></a><a class="reference internal" href="#datetime.time.minute" title="datetime.time.minute"><code class="xref py py-attr docutils literal"><span class="pre">minute</span></code></a><a class="reference internal" href="#datetime.time.second" title="datetime.time.second"><code class="xref py py-attr docutils literal"><span class="pre">second</span></code></a><a class="reference internal" href="#datetime.time.microsecond" title="datetime.time.microsecond"><code class="xref py py-attr docutils literal"><span class="pre">microsecond</span></code></a><a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a></span></p></dd></dl><dl class="class"><dt><span class="yiyi-st" id="yiyi-47"><em class="property">class</em> <code class="descclassname">datetime.</code> <code class="descname">datetime</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-48">日期和时间的组合。</span><span class="yiyi-st" id="yiyi-49">属性:<a class="reference internal" href="#datetime.datetime.year" title="datetime.datetime.year"><code class="xref py py-attr docutils literal"><span class="pre">year</span></code></a><a class="reference internal" href="#datetime.datetime.month" title="datetime.datetime.month"><code class="xref py py-attr docutils literal"><span class="pre">month</span></code></a><a class="reference internal" href="#datetime.datetime.day" title="datetime.datetime.day"><code class="xref py py-attr docutils literal"><span class="pre">day</span></code></a><a class="reference internal" href="#datetime.datetime.hour" title="datetime.datetime.hour"><code class="xref py py-attr docutils literal"><span class="pre">hour</span></code></a><a class="reference internal" href="#datetime.datetime.minute" title="datetime.datetime.minute"><code class="xref py py-attr docutils literal"><span class="pre">minute</span></code></a><a class="reference internal" href="#datetime.datetime.second" title="datetime.datetime.second"><code class="xref py py-attr docutils literal"><span class="pre">second</span></code></a><a class="reference internal" href="#datetime.datetime.microsecond" title="datetime.datetime.microsecond"><code class="xref py py-attr docutils literal"><span class="pre">microsecond</span></code></a><a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a></span></p></dd></dl><dl class="class"><dt><span class="yiyi-st" id="yiyi-50"><em class="property">class</em> <code class="descclassname">datetime.</code> <code class="descname">timedelta</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-51">表示两个<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例之间相差的时间,分辨率达到微秒。</span></p></dd></dl><dl class="class"><dt><span class="yiyi-st" id="yiyi-52"><em class="property">class</em> <code class="descclassname">datetime.</code> <code class="descname">tzinfo</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">时区信息对象的抽象基类。</span><span class="yiyi-st" id="yiyi-54">它们由<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>类使用,以提供自定义时间的调整(例如,计算时区和/或夏令时)。</span></p></dd></dl><dl class="class"><dt><span class="yiyi-st" id="yiyi-55"><em class="property">class</em> <code class="descclassname">datetime.</code> <code class="descname">timezone</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">实现<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>抽象基类的类表示与UTC的固定偏移量。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-57"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-58">这些类型的对象是不可变的。</span></p><p><span class="yiyi-st" id="yiyi-59"><a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>类型的对象总是naive的。</span></p><p><span class="yiyi-st" id="yiyi-60"><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>类型的对象可能是naive的或aware的。</span><span class="yiyi-st" id="yiyi-61">如果<code class="docutils literal"><span class="pre">d.tzinfo</span></code>不为<code class="docutils literal"><span class="pre">None</span></code><code class="docutils literal"><span class="pre">d.tzinfo.utcoffset(d)</span></code>不返回<code class="docutils literal"><span class="pre">None</span></code>,则<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象<em>d</em>是aware的。</span><span class="yiyi-st" id="yiyi-62">如果<code class="docutils literal"><span class="pre">d.tzinfo</span></code><code class="docutils literal"><span class="pre">None</span></code>或者<code class="docutils literal"><span class="pre">d.tzinfo</span></code>不为<code class="docutils literal"><span class="pre">None</span></code>但是<code class="docutils literal"><span class="pre">d.tzinfo .utcoffset(d)</span></code>返回<code class="docutils literal"><span class="pre">None</span></code>,则<em>d</em>是naive的。</span><span class="yiyi-st" id="yiyi-63">如果<code class="docutils literal"><span class="pre">t.tzinfo</span></code>不为<code class="docutils literal"><span class="pre">None</span></code><code class="docutils literal"><span class="pre">t.tzinfo.utcoffset(None)</span></code>不返回<code class="docutils literal"><span class="pre">None</span></code>,则<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象<em>t</em>是aware的。</span><span class="yiyi-st" id="yiyi-64">否则,<em>t</em>是naive的。</span></p><p><span class="yiyi-st" id="yiyi-65">Naive和aware之间的区别不适用于<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span></p><p><span class="yiyi-st" id="yiyi-66">子类关系:</span></p><pre><code class="language-python"><span></span><span class="nb">object</span>
<span class="n">timedelta</span>
<span class="n">tzinfo</span>
<span class="n">timezone</span>
<span class="n">time</span>
<span class="n">date</span>
<span class="n">datetime</span>
</code></pre></div><div class="section" id="timedelta-objects"><h2><span class="yiyi-st" id="yiyi-67">8.1.2. <a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象</span></h2><p><span class="yiyi-st" id="yiyi-68"><a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象表示时间的间隔,即两个日期或时间之间的差值。</span></p><dl class="class"><dt id="datetime.timedelta"><span class="yiyi-st" id="yiyi-69"> <em class="property">class </em><code class="descclassname">datetime.</code><code class="descname">timedelta</code><span class="sig-paren">(</span><em>days=0</em>, <em>seconds=0</em>, <em>microseconds=0</em>, <em>milliseconds=0</em>, <em>minutes=0</em>, <em>hours=0</em>, <em>weeks=0</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-70">所有参数都是可选的且默认为<code class="docutils literal"><span class="pre">0</span></code></span><span class="yiyi-st" id="yiyi-71">参数可以是整数或浮点数,也可以是正数或负数。</span></p><p><span class="yiyi-st" id="yiyi-72">只有<em>days</em><em>seconds</em><em>microseconds微秒</em>存储在内部。</span><span class="yiyi-st" id="yiyi-73">参数被转换为这些单位:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-74">1毫秒转换为1000微秒。</span></li><li><span class="yiyi-st" id="yiyi-75">1分钟转换为60秒。</span></li><li><span class="yiyi-st" id="yiyi-76">1小时转换为3600秒。</span></li><li><span class="yiyi-st" id="yiyi-77">1周被转换为7天。</span></li></ul><p><span class="yiyi-st" id="yiyi-78">然后对天,秒和微秒进行归一化,以便表示是唯一的</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-79"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">microseconds</span> <span class="pre">&lt;</span> <span class="pre">1000000</span></code></span></li><li><span class="yiyi-st" id="yiyi-80"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">seconds</span> <span class="pre">&lt;</span> <span class="pre">3600*24</span></code>(一天中的秒数)</span></li><li><span class="yiyi-st" id="yiyi-81"><code class="docutils literal"><span class="pre">-999999999</span> <span class="pre">&lt;=</span> <span class="pre">days</span> <span class="pre">&lt;=</span> <span class="pre">999999999</span></code></span></li></ul><p><span class="yiyi-st" id="yiyi-82">如果有任何一个参数是浮点数并且有微秒数则将所有参数剩余的小数微秒相加并使用round-half-to-even规则将它们的和舍入到最接近的微秒。</span><span class="yiyi-st" id="yiyi-83">如果没有参数是浮点数,则转换和规范化过程是精确的(不会丢失任何信息)。</span></p><p><span class="yiyi-st" id="yiyi-84">如果days的归一化值超出表示的范围则会引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-85">请注意,负值的标准化起初可能令人惊讶。</span><span class="yiyi-st" id="yiyi-86">例如,</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">timedelta</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">microseconds</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">days</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">seconds</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">microseconds</span><span class="p">)</span>
<span class="go">(-1, 86399, 999999)</span>
</code></pre></dd></dl><p><span class="yiyi-st" id="yiyi-87">类属性有:</span></p><dl class="attribute"><dt id="datetime.timedelta.min"><span class="yiyi-st" id="yiyi-88"> <code class="descclassname">timedelta.</code><code class="descname">min</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-89">最小的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,<code class="docutils literal"><span class="pre">timedelta(-999999999)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.timedelta.max"><span class="yiyi-st" id="yiyi-90"> <code class="descclassname">timedelta.</code><code class="descname">max</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-91">最大的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,<code class="docutils literal"><span class="pre">timedelta(days=999999999,</span> <span class="pre">hours=23,</span> <span class="pre">minutes=59,</span> <span class="pre">seconds=59,</span> <span class="pre">microseconds=999999)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.timedelta.resolution"><span class="yiyi-st" id="yiyi-92"> <code class="descclassname">timedelta.</code><code class="descname">resolution</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-93">不相等的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象之间的最小可能差值,<code class="docutils literal"><span class="pre">timedelta(microseconds=1)</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-94">注意,由于归一化,<code class="docutils literal"><span class="pre">timedelta.max</span></code> &gt; <code class="docutils literal"><span class="pre">-timedelta.min</span></code></span><span class="yiyi-st" id="yiyi-95"><code class="docutils literal"><span class="pre">-timedelta.max</span></code>不能表示成一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span></p><p><span class="yiyi-st" id="yiyi-96">实例属性(只读):</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-97">属性</span></th><th class="head"><span class="yiyi-st" id="yiyi-98"></span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-99"><code class="docutils literal"><span class="pre">days</span></code></span></td><td><span class="yiyi-st" id="yiyi-100">介于-999999999和999999999之间包括-999999999和999999999</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-101"><code class="docutils literal"><span class="pre">seconds</span></code></span></td><td><span class="yiyi-st" id="yiyi-102">介于0和86399之间包括0和86399</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-103"><code class="docutils literal"><span class="pre">microseconds</span></code></span></td><td><span class="yiyi-st" id="yiyi-104">介于0和999999之间包括0和999999</span></td></tr></tbody></table><p><span class="yiyi-st" id="yiyi-105">支持的操作:</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-106">操作</span></th><th class="head"><span class="yiyi-st" id="yiyi-107">结果</span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-108"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">+</span> <span class="pre">t3</span></code></span></td><td><span class="yiyi-st" id="yiyi-109"><em>t2</em><em>t3</em>的和。</span><span class="yiyi-st" id="yiyi-110">之后,<em>t1</em>-<em>t2</em> == <em>t3</em> and <em>t1</em>-<em>t3</em> == <em>t2</em>为真。</span><span class="yiyi-st" id="yiyi-111">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-112"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">-</span> <span class="pre">t3</span></code></span></td><td><span class="yiyi-st" id="yiyi-113"><em>t2</em><em>t3</em>的差。</span><span class="yiyi-st" id="yiyi-114">之后<em>t1</em> == <em>t2</em> - <em>t3</em> and <em>t2</em> == <em>t1</em> + <em>t3</em>为真。</span><span class="yiyi-st" id="yiyi-115">1</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-116"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">*</span> <span class="pre">i</span> <span class="pre"></span> <span class="pre">t1</span> <span class="pre">=</span> <span class="pre">i</span> <span class="pre">*</span> <span class="pre">t2</span></code></span></td><td><span class="yiyi-st" id="yiyi-117">Delta乘以一个整数。</span><span class="yiyi-st" id="yiyi-118">之后,如果<code class="docutils literal"><span class="pre">i</span> <span class="pre">!=</span> <span class="pre">0</span></code>,则<em>t1</em> // i == <em>t2</em>为真。</span></td></tr><tr class="row-odd"><td></td><td><span class="yiyi-st" id="yiyi-119">通常,<em>t1</em> * i == <em>t1</em> * (i-1) + <em>t1</em>为真。</span><span class="yiyi-st" id="yiyi-120">1</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-121"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">*</span> <span class="pre">f</span> <span class="pre"></span> <span class="pre">t1</span> <span class="pre">=</span> <span class="pre">f</span> <span class="pre">*</span> <span class="pre">t2</span></code></span></td><td><span class="yiyi-st" id="yiyi-122">Delta乘以一个浮点数。</span><span class="yiyi-st" id="yiyi-123">结果使用round-half-to-even舍入到timedelta.resolution最近的倍数。</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-124"><code class="docutils literal"><span class="pre">f</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">/</span> <span class="pre">t3</span></code></span></td><td><span class="yiyi-st" id="yiyi-125"><em>t2</em>除以<em>t3</em>3</span><span class="yiyi-st" id="yiyi-126">返回一个<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>对象。</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-127"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">/</span> <span class="pre">f</span> <span class="pre"></span> <span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">/</span> <span class="pre">i</span></code></span></td><td><span class="yiyi-st" id="yiyi-128">Delta除以一个浮点数或整数。</span><span class="yiyi-st" id="yiyi-129">结果使用round-half-to-even舍入到timedelta.resolution最近的倍数。</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-130"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">//</span> <span class="pre">i</span></code><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">//</span> <span class="pre">t3</span></code></span></td><td><span class="yiyi-st" id="yiyi-131">计算商,余数(如果有的话)被丢弃。</span><span class="yiyi-st" id="yiyi-132">在第二种情况下,返回一个整数。</span><span class="yiyi-st" id="yiyi-133">3</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-134"><code class="docutils literal"><span class="pre">t1</span> <span class="pre">=</span> <span class="pre">t2</span> <span class="pre">%</span> <span class="pre">t3</span></code></span></td><td><span class="yiyi-st" id="yiyi-135">计算余数,为一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-136">3</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-137"><code class="docutils literal"><span class="pre">q,</span> <span class="pre">r</span> <span class="pre">=</span> <span class="pre">divmod(t1,</span> <span class="pre">t2)</span></code></span></td><td><span class="yiyi-st" id="yiyi-138">计算商和余数:<code class="docutils literal"><span class="pre">q</span> <span class="pre">=</span> <span class="pre">t1</span> <span class="pre">//</span> <span class="pre">t2</span></code> (3)且<code class="docutils literal"><span class="pre">r</span> <span class="pre">=</span> <span class="pre">t1</span> <span class="pre">%</span> <span class="pre">t2</span></code></span><span class="yiyi-st" id="yiyi-139">q一个是整数r是一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-140"><code class="docutils literal"><span class="pre">+t1</span></code></span></td><td><span class="yiyi-st" id="yiyi-141">返回具有相同值的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-142">2</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-143"><code class="docutils literal"><span class="pre">-t1</span></code></span></td><td><span class="yiyi-st" id="yiyi-144">等效于<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>(-<em>t1.days</em>, -<em>t1.seconds</em>, -<em>t1.microseconds</em>),和<em>t1</em>* -1。</span><span class="yiyi-st" id="yiyi-145">14</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-146"><code class="docutils literal"><span class="pre">abs(t)</span></code></span></td><td><span class="yiyi-st" id="yiyi-147"><code class="docutils literal"><span class="pre">t.days</span> <span class="pre">&gt;=</span> <span class="pre">0</span></code>时等效于+<em>t</em>,当<code class="docutils literal"><span class="pre">t.days</span> <span class="pre">&lt;</span> <span class="pre">0</span></code>时等效于-<em>t</em></span><span class="yiyi-st" id="yiyi-148">2</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-149"><code class="docutils literal"><span class="pre">str(t)</span></code></span></td><td><span class="yiyi-st" id="yiyi-150"><code class="docutils literal"><span class="pre">[D</span> <span class="pre">day[s],</span> <span class="pre">][H]H:MM:SS[.UUUUUU]</span></code>形式返回一个字符串,其中对于负<code class="docutils literal"><span class="pre">t</span></code>D为负数。(5)</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-151"><code class="docutils literal"><span class="pre">repr(t)</span></code></span></td><td><span class="yiyi-st" id="yiyi-152"><code class="docutils literal"><span class="pre">datetime.timedelta(D[,</span> <span class="pre">S[,</span> <span class="pre">U]])</span></code>形式返回一个字符串,其中对于负<code class="docutils literal"><span class="pre">t</span></code>D为负数。(5)</span></td></tr></tbody></table><p><span class="yiyi-st" id="yiyi-153">注:</span></p><ol class="arabic"><li><p class="first"><span class="yiyi-st" id="yiyi-154">虽然相等,但可能会溢出。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-155">相等且不会溢出。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-156">除0引发<a class="reference internal" href="exceptions.html#ZeroDivisionError" title="ZeroDivisionError"><code class="xref py py-exc docutils literal"><span class="pre">ZeroDivisionError</span></code></a></span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-157">- <em>timedelta.max</em>不能表示成一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-158"><a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象的字符串表示形式与其内部表示形式相似。</span><span class="yiyi-st" id="yiyi-159">这导致负面timedeltas有点不寻常的结果。</span><span class="yiyi-st" id="yiyi-160">例如:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=-</span><span class="mi">5</span><span class="p">)</span>
<span class="go">datetime.timedelta(-1, 68400)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">_</span><span class="p">)</span>
<span class="go">-1 day, 19:00:00</span>
</code></pre></li></ol><p><span class="yiyi-st" id="yiyi-161">除了上面列出的操作,<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象支持与<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象相加和相减(见下文)。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-162"><span class="versionmodified">在版本3.2中更改:</span>现在支持一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象和另一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象的整除和真除,以及余数操作和<a class="reference internal" href="functions.html#divmod" title="divmod"><code class="xref py py-func docutils literal"><span class="pre">divmod()</span></code></a>函数。</span><span class="yiyi-st" id="yiyi-163">现在支持<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象与<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>对象的真除和乘法。</span></p></div><p><span class="yiyi-st" id="yiyi-164">支持<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象的比较,表示较小时间差的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象被认为是较小的timedelta。</span><span class="yiyi-st" id="yiyi-165">为了阻止混合类型之间的比较回退到默认的以对象地址进行的比较,当将<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象与不同类型的对象进行比较时,会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>除非比较是<code class="docutils literal"><span class="pre">==</span></code><code class="docutils literal"><span class="pre">!=</span></code></span><span class="yiyi-st" id="yiyi-166">后一种情况分别返回<a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal"><span class="pre">False</span></code></a><a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal"><span class="pre">True</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-167"><a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象是<a class="reference internal" href="../glossary.html#term-hashable"><span class="xref std std-term">可哈希的</span></a>可用作字典键支持高效的pickling在布尔上下文中<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>当且仅当它不等于<code class="docutils literal"><span class="pre">timedelta(0)</span></code>时才为真。</span></p><p><span class="yiyi-st" id="yiyi-168">实例方法:</span></p><dl class="method"><dt id="datetime.timedelta.total_seconds"><span class="yiyi-st" id="yiyi-169"> <code class="descclassname">timedelta.</code><code class="descname">total_seconds</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-170">返回持续时间中包含的总秒数。</span><span class="yiyi-st" id="yiyi-171">等同于<code class="docutils literal"><span class="pre">td</span> <span class="pre">/</span> <span class="pre">timedelta(seconds=1)</span></code></span></p><p><span class="yiyi-st" id="yiyi-172">请注意对于非常大的时间间隔在大多数平台上超过270年此方法将失去微秒精度。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-173"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-174">用法示例:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">timedelta</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">year</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">365</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">another_year</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">weeks</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">days</span><span class="o">=</span><span class="mi">84</span><span class="p">,</span> <span class="n">hours</span><span class="o">=</span><span class="mi">23</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">minutes</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">seconds</span><span class="o">=</span><span class="mi">600</span><span class="p">)</span> <span class="c1"># adds up to 365 days</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">year</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span>
<span class="go">31536000.0</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">year</span> <span class="o">==</span> <span class="n">another_year</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ten_years</span> <span class="o">=</span> <span class="mi">10</span> <span class="o">*</span> <span class="n">year</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ten_years</span><span class="p">,</span> <span class="n">ten_years</span><span class="o">.</span><span class="n">days</span> <span class="o">//</span> <span class="mi">365</span>
<span class="go">(datetime.timedelta(3650), 10)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">nine_years</span> <span class="o">=</span> <span class="n">ten_years</span> <span class="o">-</span> <span class="n">year</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">nine_years</span><span class="p">,</span> <span class="n">nine_years</span><span class="o">.</span><span class="n">days</span> <span class="o">//</span> <span class="mi">365</span>
<span class="go">(datetime.timedelta(3285), 9)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">three_years</span> <span class="o">=</span> <span class="n">nine_years</span> <span class="o">//</span> <span class="mi">3</span><span class="p">;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">three_years</span><span class="p">,</span> <span class="n">three_years</span><span class="o">.</span><span class="n">days</span> <span class="o">//</span> <span class="mi">365</span>
<span class="go">(datetime.timedelta(1095), 3)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">abs</span><span class="p">(</span><span class="n">three_years</span> <span class="o">-</span> <span class="n">ten_years</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">three_years</span> <span class="o">+</span> <span class="n">year</span>
<span class="go">True</span>
</code></pre></div><div class="section" id="date-objects"><h2><span class="yiyi-st" id="yiyi-175">8.1.3. <a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象</span></h2><p><span class="yiyi-st" id="yiyi-176"><a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象表示理想化日历中的日期(年、月和日),即当前公历日历在两个方向上无限延伸。</span><span class="yiyi-st" id="yiyi-177">第1年的1月1日被称为第1日第1年的1月2日被称为第2日依此类推。</span><span class="yiyi-st" id="yiyi-178">这与Dershowitz和Reingold的书Calendrical Calculations中的“预测格里历”日历的定义相匹配它是所有计算的基准日历。</span><span class="yiyi-st" id="yiyi-179">请参阅本书,了解在格雷戈里公会和许多其他日历系统之间进行转换的算法。</span></p><dl class="class"><dt id="datetime.date"><span class="yiyi-st" id="yiyi-180"> <em class="property">class </em><code class="descclassname">datetime.</code><code class="descname">date</code><span class="sig-paren">(</span><em>year</em>, <em>month</em>, <em>day</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-181">所有参数都是必需的。</span><span class="yiyi-st" id="yiyi-182">参数可以是以下范围内的整数:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-183"><code class="docutils literal"><span class="pre">MINYEAR</span> <span class="pre">&lt;=</span> <span class="pre">year</span> <span class="pre">&lt;=</span> <span class="pre">MAXYEAR</span></code></span></li><li><span class="yiyi-st" id="yiyi-184"><code class="docutils literal"><span class="pre">1</span> <span class="pre">&lt;=</span> <span class="pre">month</span> <span class="pre">&lt;=</span> <span class="pre">12</span></code></span></li><li><span class="yiyi-st" id="yiyi-185"><code class="docutils literal"><span class="pre">1</span> <span class="pre">&lt;=</span> <span class="pre">day</span> <span class="pre">&lt;=</span> <span class="pre">number</span> <span class="pre">of</span> <span class="pre">days</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">given</span> <span class="pre">month</span> <span class="pre">and</span> <span class="pre">year</span></code></span></li></ul><p><span class="yiyi-st" id="yiyi-186">如果给出了这些范围之外的参数,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-187">其他构造函数,所有类方法:</span></p><dl class="classmethod"><dt id="datetime.date.today"><span class="yiyi-st" id="yiyi-188"> <em class="property">classmethod </em><code class="descclassname">date.</code><code class="descname">today</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-189">返回当前的本地日期。</span><span class="yiyi-st" id="yiyi-190">这相当于<code class="docutils literal"><span class="pre">date.fromtimestamp(time.time())</span></code></span></p></dd></dl><dl class="classmethod"><dt id="datetime.date.fromtimestamp"><span class="yiyi-st" id="yiyi-191"> <em class="property">classmethod </em><code class="descclassname">date.</code><code class="descname">fromtimestamp</code><span class="sig-paren">(</span><em>timestamp</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-192">返回与POSIX时间戳对应的本地日期例如<a class="reference internal" href="time.html#time.time" title="time.time"><code class="xref py py-func docutils literal"><span class="pre">time.time()</span></code></a>返回的时间戳。</span><span class="yiyi-st" id="yiyi-193">如果时间戳超出平台C <code class="xref c c-func docutils literal"><span class="pre">localtime()</span></code>函数支持的值的范围则引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>,如果<code class="xref c c-func docutils literal"><span class="pre">localtime()</span></code>失败则引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a></span><span class="yiyi-st" id="yiyi-194">从1970年到2038年这种情况很常见。</span><span class="yiyi-st" id="yiyi-195">请注意在时间戳中包含闰秒的非POSIX系统上<a class="reference internal" href="#datetime.date.fromtimestamp" title="datetime.date.fromtimestamp"><code class="xref py py-meth docutils literal"><span class="pre">fromtimestamp()</span></code></a>会忽略闰秒。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-196"><span class="versionmodified">在版本3.3中更改:</span>如果时间戳超出平台C <code class="xref c c-func docutils literal"><span class="pre">localtime ()</span></code>函数支持的值范围,则引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>而不是<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-197"><code class="xref c c-func docutils literal"><span class="pre">localtime()</span></code>失败时引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>而不是<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p></div></dd></dl><dl class="classmethod"><dt id="datetime.date.fromordinal"><span class="yiyi-st" id="yiyi-198"> <em class="property">classmethod </em><code class="descclassname">date.</code><code class="descname">fromordinal</code><span class="sig-paren">(</span><em>ordinal</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-199">返回对应于格雷高尔顺序的日期其中第1年的1月1有序号1。</span><span class="yiyi-st" id="yiyi-200">如果不满足<code class="docutils literal"><span class="pre">1</span> <span class="pre">&lt;=</span> <span class="pre">ordinal</span> <span class="pre">&lt;=</span> <span class="pre">date.max.toordinal()</span></code>,则引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-201">对于任何日期<em>d</em><code class="docutils literal"><span class="pre">date.fromordinal(d.toordinal())</span> <span class="pre">==</span> <span class="pre">d</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-202">类属性:</span></p><dl class="attribute"><dt id="datetime.date.min"><span class="yiyi-st" id="yiyi-203"> <code class="descclassname">date.</code><code class="descname">min</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-204">可表示的最早日期,<code class="docutils literal"><span class="pre">date(MINYEAR,</span> <span class="pre">1,</span> <span class="pre">1)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.date.max"><span class="yiyi-st" id="yiyi-205"> <code class="descclassname">date.</code><code class="descname">max</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-206">可表示最晚的日期,<code class="docutils literal"><span class="pre">date(MAXYEAR,</span> <span class="pre">12,</span> <span class="pre">31)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.date.resolution"><span class="yiyi-st" id="yiyi-207"> <code class="descclassname">date.</code><code class="descname">resolution</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-208">不相等的日期对象之间的最小可能差异,<code class="docutils literal"><span class="pre">timedelta(days=1)</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-209">实例属性(只读):</span></p><dl class="attribute"><dt id="datetime.date.year"><span class="yiyi-st" id="yiyi-210"> <code class="descclassname">date.</code><code class="descname">year</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-211"><a class="reference internal" href="#datetime.MINYEAR" title="datetime.MINYEAR"><code class="xref py py-const docutils literal"><span class="pre">MINYEAR</span></code></a><a class="reference internal" href="#datetime.MAXYEAR" title="datetime.MAXYEAR"><code class="xref py py-const docutils literal"><span class="pre">MAXYEAR</span></code></a>之间,包括这两个值。</span></p></dd></dl><dl class="attribute"><dt id="datetime.date.month"><span class="yiyi-st" id="yiyi-212"> <code class="descclassname">date.</code><code class="descname">month</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-213">1至12之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.date.day"><span class="yiyi-st" id="yiyi-214"> <code class="descclassname">date.</code><code class="descname">day</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-215">在1和给定年的给定月份中的天数之间。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-216">支持的操作:</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-217">操作</span></th><th class="head"><span class="yiyi-st" id="yiyi-218">结果</span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-219"><code class="docutils literal"><span class="pre">date2</span> <span class="pre">=</span> <span class="pre">date1</span> <span class="pre">+</span> <span class="pre">timedelta</span></code></span></td><td><span class="yiyi-st" id="yiyi-220"><em>date2</em>为从<em>date1</em>中移除<code class="docutils literal"><span class="pre">timedelta.days</span></code>天。</span><span class="yiyi-st" id="yiyi-221">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-222"><code class="docutils literal"><span class="pre">date2</span> <span class="pre">=</span> <span class="pre">date1</span> <span class="pre">-</span> <span class="pre">timedelta</span></code></span></td><td><span class="yiyi-st" id="yiyi-223">计算<em>date2</em>,以便<code class="docutils literal"><span class="pre">date2</span> <span class="pre">+</span> <span class="pre">timedelta</span> <span class="pre">==</span> <span class="pre">date1</span></code></span><span class="yiyi-st" id="yiyi-224">2</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-225"><code class="docutils literal"><span class="pre">timedelta</span> <span class="pre">=</span> <span class="pre">date1</span> <span class="pre">-</span> <span class="pre">date2</span></code></span></td><td><span class="yiyi-st" id="yiyi-226">3</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-227"><code class="docutils literal"><span class="pre">date1</span> <span class="pre"></span> <span class="pre">date2</span></code></span></td><td><span class="yiyi-st" id="yiyi-228"><em>date1</em>在时间上位于<em>date2</em>之前,则<em>date1</em>小于<em>date2</em></span><span class="yiyi-st" id="yiyi-229">4</span></td></tr></tbody></table><p><span class="yiyi-st" id="yiyi-230">注:</span></p><ol class="arabic simple"><li><span class="yiyi-st" id="yiyi-231">如果<code class="docutils literal"><span class="pre">timedelta.days</span> <span class="pre">&gt;</span> <span class="pre">0</span></code>,则<em>date2</em>在时间上向前移,如果<code class="docutils literal"><span class="pre">timedelta.days</span> <span class="pre">&lt;</span> <span class="pre">0</span></code>,则向后移。</span><span class="yiyi-st" id="yiyi-232">之后,<code class="docutils literal"><span class="pre">date2</span> <span class="pre">-</span> <span class="pre">date1</span> <span class="pre">==</span> <span class="pre">timedelta.days</span></code></span><span class="yiyi-st" id="yiyi-233"><code class="docutils literal"><span class="pre">timedelta.seconds</span></code><code class="docutils literal"><span class="pre">timedelta.microseconds</span></code>被忽略。</span><span class="yiyi-st" id="yiyi-234">如果<code class="docutils literal"><span class="pre">date2.year</span></code>小于<a class="reference internal" href="#datetime.MINYEAR" title="datetime.MINYEAR"><code class="xref py py-const docutils literal"><span class="pre">MINYEAR</span></code></a>或大于<a class="reference internal" href="#datetime.MAXYEAR" title="datetime.MAXYEAR"><code class="xref py py-const docutils literal"><span class="pre">MAXYEAR</span></code></a>,则引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a></span></li><li><span class="yiyi-st" id="yiyi-235">这不完全等同于date1 + (-timedelta),因为-timedelta在单独的情况下可能会溢出而date1 - timedelta不会。</span><span class="yiyi-st" id="yiyi-236"><code class="docutils literal"><span class="pre">timedelta.seconds</span></code><code class="docutils literal"><span class="pre">timedelta.microseconds</span></code>被忽略。</span></li><li><span class="yiyi-st" id="yiyi-237">相等且不会溢出。</span><span class="yiyi-st" id="yiyi-238">timedelta.seconds和timedelta.microseconds为0并且之后date2 + timedelta == date1。</span></li><li><span class="yiyi-st" id="yiyi-239">换句话说,<code class="docutils literal"><span class="pre">date1</span> <span class="pre">&lt;</span> <span class="pre">date2</span></code>当且仅当<code class="docutils literal"><span class="pre">date1.toordinal()</span> <span class="pre">&lt;</span> <span class="pre">date2.toordinal()</span></code></span><span class="yiyi-st" id="yiyi-240">为了停止比较回退到默认的比较对象地址的方式,如果另一比较对象不是<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象,日期比较通常引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span><span class="yiyi-st" id="yiyi-241">但是,如果另一个比较对象具有<code class="xref py py-meth docutils literal"><span class="pre">timetuple()</span></code>属性,则会返回<code class="docutils literal"><span class="pre">NotImplemented</span></code></span><span class="yiyi-st" id="yiyi-242">这个钩子给其他种类的日期对象实现混合型比较的机会。</span><span class="yiyi-st" id="yiyi-243">如果不是,当将<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象与不同类型的对象进行比较时,则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>,除非比较为<code class="docutils literal"><span class="pre">==</span></code><code class="docutils literal"><span class="pre">!=</span></code></span><span class="yiyi-st" id="yiyi-244">后一种情况分别返回<a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal"><span class="pre">False</span></code></a><a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal"><span class="pre">True</span></code></a></span></li></ol><p><span class="yiyi-st" id="yiyi-245">日期可以用作字典键。</span><span class="yiyi-st" id="yiyi-246">在布尔上下文中,所有<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象都被视为真。</span></p><p><span class="yiyi-st" id="yiyi-247">实例方法:</span></p><dl class="method"><dt id="datetime.date.replace"><span class="yiyi-st" id="yiyi-248"> <code class="descclassname">date.</code><code class="descname">replace</code><span class="sig-paren">(</span><em>year</em>, <em>month</em>, <em>day</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-249">使用相同的值返回一个日期,除了那些由指定的关键字参数给定新值的参数。</span><span class="yiyi-st" id="yiyi-250">例如,如果<code class="docutils literal"><span class="pre">d</span> <span class="pre">==</span> <span class="pre">date(2002,</span> <span class="pre">12,</span> <span class="pre">31)</span></code>,那么<code class="docutils literal"><span class="pre">d.replace(day=26)</span> <span class="pre">==</span> <span class="pre">date(2002,</span> <span class="pre">12,</span> <span class="pre">26)</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.date.timetuple"><span class="yiyi-st" id="yiyi-251"> <code class="descclassname">date.</code><code class="descname">timetuple</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-252">返回一个<a class="reference internal" href="time.html#time.struct_time" title="time.struct_time"><code class="xref py py-class docutils literal"><span class="pre">time.struct_time</span></code></a>,类似<a class="reference internal" href="time.html#time.localtime" title="time.localtime"><code class="xref py py-func docutils literal"><span class="pre">time.localtime()</span></code></a>的返回值。</span><span class="yiyi-st" id="yiyi-253">Hours、minutes和seconds为0DST标记为-1。<code class="docutils literal"><span class="pre">d.timetuple()</span></code>等同于<code class="docutils literal"><span class="pre">time.struct_time((d.year,</span> <span class="pre">d.month,</span> <span class="pre">d.day,</span> <span class="pre">0,</span> <span class="pre">0,</span> <span class="pre">0,</span> <span class="pre">d.weekday(),</span> <span class="pre">yday,</span> <span class="pre">-1))</span></code>,其中<code class="docutils literal"><span class="pre">yday</span> <span class="pre">=</span> <span class="pre">d.toordinal()</span> <span class="pre">-</span> <span class="pre">date(d.year,</span> <span class="pre">1,</span> <span class="pre">1).toordinal()</span> <span class="pre">+</span> <span class="pre">1</span></code>当前年份中的天数1月1日为开始的第<code class="docutils literal"><span class="pre">1</span></code>天。</span></p></dd></dl><dl class="method"><dt id="datetime.date.toordinal"><span class="yiyi-st" id="yiyi-254"> <code class="descclassname">date.</code><code class="descname">toordinal</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-255">返回该日期的预测格里历序号其中第一年的1月1号具有序数1。</span><span class="yiyi-st" id="yiyi-256">对于任何<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象<em>d</em><code class="docutils literal"><span class="pre">date.fromordinal(d.toordinal())</span> <span class="pre">==</span> <span class="pre">d</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.date.weekday"><span class="yiyi-st" id="yiyi-257"> <code class="descclassname">date.</code><code class="descname">weekday</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-258">将星期几作为整数返回其中星期一为0星期日为6。</span><span class="yiyi-st" id="yiyi-259">例如,<code class="docutils literal"><span class="pre">date(2002,</span> <span class="pre">12,</span> <span class="pre">4).weekday()</span> <span class="pre">==</span> <span class="pre">2</span></code>,是星期三。</span><span class="yiyi-st" id="yiyi-260">另请参见<a class="reference internal" href="#datetime.date.isoweekday" title="datetime.date.isoweekday"><code class="xref py py-meth docutils literal"><span class="pre">isoweekday()</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.date.isoweekday"><span class="yiyi-st" id="yiyi-261"> <code class="descclassname">date.</code><code class="descname">isoweekday</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-262">将星期几作为整数返回其中星期一为1星期日为7。</span><span class="yiyi-st" id="yiyi-263">例如,<code class="docutils literal"><span class="pre">date(2002,</span> <span class="pre">12,</span> <span class="pre">4).isoweekday()</span> <span class="pre">==</span> <span class="pre">3</span></code>,是星期三。</span><span class="yiyi-st" id="yiyi-264">另请参见<a class="reference internal" href="#datetime.date.weekday" title="datetime.date.weekday"><code class="xref py py-meth docutils literal"><span class="pre">weekday()</span></code></a><a class="reference internal" href="#datetime.date.isocalendar" title="datetime.date.isocalendar"><code class="xref py py-meth docutils literal"><span class="pre">isocalendar()</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.date.isocalendar"><span class="yiyi-st" id="yiyi-265"> <code class="descclassname">date.</code><code class="descname">isocalendar</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-266">返回3元组ISO年ISO周编号ISO工作日</span></p><p><span class="yiyi-st" id="yiyi-267">ISO日历是公历日历的广泛使用的变体。</span><span class="yiyi-st" id="yiyi-268">有关详细说明,请参阅<a class="reference external" href="https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm">https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm</a></span></p><p><span class="yiyi-st" id="yiyi-269">ISO年包括52或53个整周其中一周从星期一开始并在星期日结束。</span><span class="yiyi-st" id="yiyi-270">ISO年的第一周是一年的第一个包含星期四的公历日历周。</span><span class="yiyi-st" id="yiyi-271">这称为周数1该周四的ISO年与其公历年相同。</span></p><p><span class="yiyi-st" id="yiyi-272">例如2004年从星期四开始因此ISO 2004年的第一周从2003年12月29日星期一开始2004年1月4日星期日结束因此<code class="docutils literal"><span class="pre">date(2003,</span> <span class="pre">12,</span> <span class="pre">29).isocalendar()</span> <span class="pre">==</span> <span class="pre">(2004,</span> <span class="pre">1,</span> <span class="pre">1)</span></code>以及<code class="docutils literal"><span class="pre">date(2004,</span> <span class="pre">1,</span> <span class="pre">4).isocalendar()</span> <span class="pre">==</span> <span class="pre">(2004,</span> <span class="pre">1,</span> <span class="pre">7)</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.date.isoformat"><span class="yiyi-st" id="yiyi-273"> <code class="descclassname">date.</code><code class="descname">isoformat</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-274">以ISO 8601格式返回表示日期的字符串'YYYY-MM-DD'。</span><span class="yiyi-st" id="yiyi-275">例如,<code class="docutils literal"><span class="pre">date(2002,</span> <span class="pre">12,</span> <span class="pre">4).isoformat()</span> <span class="pre">==</span> <span class="pre">'2002-12-04'</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.date.__str__"><span class="yiyi-st" id="yiyi-276"> <code class="descclassname">date.</code><code class="descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-277">对于日期<em>d</em><code class="docutils literal"><span class="pre">str(d)</span></code>等同于<code class="docutils literal"><span class="pre">d.isoformat()</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.date.ctime"><span class="yiyi-st" id="yiyi-278"> <code class="descclassname">date.</code><code class="descname">ctime</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-279">返回表示日期的字符串,例如<code class="docutils literal"><span class="pre">date(2002,</span> <span class="pre">12,</span> <span class="pre">4).ctime()</span> <span class="pre">==</span> <span class="pre">'Wed</span> <span class="pre">Dec</span> <span class="pre">4</span> <span class="pre">00:00:00</span> <span class="pre">2002'</span></code></span><span class="yiyi-st" id="yiyi-280">在原生的C函数<code class="xref c c-func docutils literal"><span class="pre">ctime()</span></code><a class="reference internal" href="time.html#time.ctime" title="time.ctime"><code class="xref py py-func docutils literal"><span class="pre">time.ctime()</span></code></a>调用它,但是<a class="reference internal" href="#datetime.date.ctime" title="datetime.date.ctime"><code class="xref py py-meth docutils literal"><span class="pre">date.ctime()</span></code></a> 不调用它遵守C标准的平台上<code class="docutils literal"><span class="pre">d.ctime()</span></code>等效于<code class="docutils literal"><span class="pre">time.ctime(time.mktime(d.timetuple()))</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.date.strftime"><span class="yiyi-st" id="yiyi-281"> <code class="descclassname">date.</code><code class="descname">strftime</code><span class="sig-paren">(</span><em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-282">返回一个表示日期的字符串,由一个明确的格式字符串控制。</span><span class="yiyi-st" id="yiyi-283">指代小时分钟或秒的格式代码将会看到0个值。</span><span class="yiyi-st" id="yiyi-284">有关格式化指令的完整列表请参阅strftime()和strptime()行为。<a class="reference internal" href="#strftime-strptime-behavior"><span></span></a></span></p></dd></dl><dl class="method"><dt id="datetime.date.__format__"><span class="yiyi-st" id="yiyi-285"> <code class="descclassname">date.</code><code class="descname">__format__</code><span class="sig-paren">(</span><em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-286"><a class="reference internal" href="#datetime.date.strftime" title="datetime.date.strftime"><code class="xref py py-meth docutils literal"><span class="pre">date.strftime()</span></code></a>相同。</span><span class="yiyi-st" id="yiyi-287">这使得可以在使用<a class="reference internal" href="stdtypes.html#str.format" title="str.format"><code class="xref py py-meth docutils literal"><span class="pre">str.format()</span></code></a>时为<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象指定格式字符串。</span><span class="yiyi-st" id="yiyi-288">有关格式化指令的完整列表,请参见<a class="reference internal" href="#strftime-strptime-behavior"><span>strftime()和strptime()的行为</span></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-289">计算事件日期的示例:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">time</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">date</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">today</span> <span class="o">=</span> <span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">today</span>
<span class="go">datetime.date(2007, 12, 5)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">today</span> <span class="o">==</span> <span class="n">date</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">my_birthday</span> <span class="o">=</span> <span class="n">date</span><span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">24</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="n">my_birthday</span> <span class="o">&lt;</span> <span class="n">today</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">my_birthday</span> <span class="o">=</span> <span class="n">my_birthday</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="n">today</span><span class="o">.</span><span class="n">year</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">my_birthday</span>
<span class="go">datetime.date(2008, 6, 24)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">time_to_birthday</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">my_birthday</span> <span class="o">-</span> <span class="n">today</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">time_to_birthday</span><span class="o">.</span><span class="n">days</span>
<span class="go">202</span>
</code></pre><p><span class="yiyi-st" id="yiyi-290">使用<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>的示例:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">date</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span> <span class="o">=</span> <span class="n">date</span><span class="o">.</span><span class="n">fromordinal</span><span class="p">(</span><span class="mi">730920</span><span class="p">)</span> <span class="c1"># 730920th day after 1. 1. 0001</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span>
<span class="go">datetime.date(2002, 3, 11)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">timetuple</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">t</span><span class="p">:</span>
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="go">2002 # year</span>
<span class="go">3 # month</span>
<span class="go">11 # day</span>
<span class="go">0</span>
<span class="go">0</span>
<span class="go">0</span>
<span class="go">0 # weekday (0 = Monday)</span>
<span class="go">70 # 70th day in the year</span>
<span class="go">-1</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ic</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">isocalendar</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ic</span><span class="p">:</span>
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="go">2002 # ISO year</span>
<span class="go">11 # ISO week number</span>
<span class="go">1 # ISO day number ( 1 = Monday )</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
<span class="go">'2002-03-11'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2">/%m/%y"</span><span class="p">)</span>
<span class="go">'11/03/02'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%A </span><span class="si">%d</span><span class="s2">. %B %Y"</span><span class="p">)</span>
<span class="go">'Monday 11. March 2002'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">'The </span><span class="si">{1}</span><span class="s1"> is {0:</span><span class="si">%d</span><span class="s1">}, the </span><span class="si">{2}</span><span class="s1"> is {0:%B}.'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s2">"day"</span><span class="p">,</span> <span class="s2">"month"</span><span class="p">)</span>
<span class="go">'The day is 11, the month is March.'</span>
</code></pre></div><div class="section" id="datetime-objects"><h2><span class="yiyi-st" id="yiyi-291">8.1.4. <a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象</span></h2><p><span class="yiyi-st" id="yiyi-292"><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象是一个包含<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象和<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象所有信息的单个对象。</span><span class="yiyi-st" id="yiyi-293">类似<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象,<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>假定当前公历日历在两个方向上延伸类似time对象<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>假设每天有精确的3600*24秒。</span></p><p><span class="yiyi-st" id="yiyi-294">构造函数:</span></p><dl class="class"><dt id="datetime.datetime"><span class="yiyi-st" id="yiyi-295"> <em class="property">class </em><code class="descclassname">datetime.</code><code class="descname">datetime</code><span class="sig-paren">(</span><em>year</em>, <em>month</em>, <em>day</em>, <em>hour=0</em>, <em>minute=0</em>, <em>second=0</em>, <em>microsecond=0</em>, <em>tzinfo=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-296">年,月和日的参数是必需的。</span><span class="yiyi-st" id="yiyi-297"><em>tzinfo</em>可以是<code class="docutils literal"><span class="pre">None</span></code><a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的实例。</span><span class="yiyi-st" id="yiyi-298">其余的参数可以是以下范围内的整数:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-299"><code class="docutils literal"><span class="pre">MINYEAR</span> <span class="pre">&lt;=</span> <span class="pre">year</span> <span class="pre">&lt;=</span> <span class="pre">MAXYEAR</span></code></span></li><li><span class="yiyi-st" id="yiyi-300"><code class="docutils literal"><span class="pre">1</span> <span class="pre">&lt;=</span> <span class="pre">month</span> <span class="pre">&lt;=</span> <span class="pre">12</span></code></span></li><li><span class="yiyi-st" id="yiyi-301"><code class="docutils literal"><span class="pre">1</span> <span class="pre">&lt;=</span> <span class="pre">day</span> <span class="pre">&lt;=</span> <span class="pre">number</span> <span class="pre">of</span> <span class="pre">days</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">given</span> <span class="pre">month</span> <span class="pre">and</span> <span class="pre">year</span></code></span></li><li><span class="yiyi-st" id="yiyi-302"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">hour</span> <span class="pre">&lt;</span> <span class="pre">24</span></code></span></li><li><span class="yiyi-st" id="yiyi-303"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">minute</span> <span class="pre">&lt;</span> <span class="pre">60</span></code></span></li><li><span class="yiyi-st" id="yiyi-304"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">second</span> <span class="pre">&lt;</span> <span class="pre">60</span></code></span></li><li><span class="yiyi-st" id="yiyi-305"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">microsecond</span> <span class="pre">&lt;</span> <span class="pre">1000000</span></code></span></li></ul><p><span class="yiyi-st" id="yiyi-306">如果给出了这些范围之外的参数,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-307">其他构造函数,所有类方法:</span></p><dl class="classmethod"><dt id="datetime.datetime.today"><span class="yiyi-st" id="yiyi-308"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">today</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-309">返回当前本地日期时间,其中<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-310">这相当于<code class="docutils literal"><span class="pre">datetime.fromtimestamp(time.time())</span></code></span><span class="yiyi-st" id="yiyi-311">另请参见<a class="reference internal" href="#datetime.datetime.now" title="datetime.datetime.now"><code class="xref py py-meth docutils literal"><span class="pre">now()</span></code></a><a class="reference internal" href="#datetime.datetime.fromtimestamp" title="datetime.datetime.fromtimestamp"><code class="xref py py-meth docutils literal"><span class="pre">fromtimestamp()</span></code></a></span></p></dd></dl><dl class="classmethod"><dt id="datetime.datetime.now"><span class="yiyi-st" id="yiyi-312"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">now</code><span class="sig-paren">(</span><em>tz=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-313">返回当前的本地日期和时间。</span><span class="yiyi-st" id="yiyi-314">如果可选参数<em>tz</em><code class="docutils literal"><span class="pre">None</span></code>或未指定,则这类似于<a class="reference internal" href="#datetime.datetime.today" title="datetime.datetime.today"><code class="xref py py-meth docutils literal"><span class="pre">today()</span></code></a>,但如果可能,通过<a class="reference internal" href="time.html#time.time" title="time.time"><code class="xref py py-func docutils literal"><span class="pre">time.time()</span></code></a>时间戳提供更高的精度例如这在提供C <code class="xref c c-func docutils literal"><span class="pre">gettimeofday()</span></code>函数的平台上是可能的)。</span></p><p><span class="yiyi-st" id="yiyi-315">如果<em>tz</em>不为<code class="docutils literal"><span class="pre">None</span></code>,则必须是<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的实例,当前日期和时间将转换为<em>tz</em>的时区。</span><span class="yiyi-st" id="yiyi-316">在这种情况下,结果等效于<code class="docutils literal"><span class="pre">tz.fromutc(datetime.utcnow().replace(tzinfo=tz))</span></code></span><span class="yiyi-st" id="yiyi-317">另请参见<a class="reference internal" href="#datetime.datetime.today" title="datetime.datetime.today"><code class="xref py py-meth docutils literal"><span class="pre">today()</span></code></a><a class="reference internal" href="#datetime.datetime.utcnow" title="datetime.datetime.utcnow"><code class="xref py py-meth docutils literal"><span class="pre">utcnow()</span></code></a></span></p></dd></dl><dl class="classmethod"><dt id="datetime.datetime.utcnow"><span class="yiyi-st" id="yiyi-318"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">utcnow</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-319">返回当前UTC日期和时间其中<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-320">这类似<a class="reference internal" href="#datetime.datetime.now" title="datetime.datetime.now"><code class="xref py py-meth docutils literal"><span class="pre">now()</span></code></a>但返回当前UTC日期和时间作为一个naive的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-321">可以通过调用<code class="docutils literal"><span class="pre">datetime.now(timezone.utc)</span></code>来得到aware的当前UTC datetime。</span><span class="yiyi-st" id="yiyi-322">另请参见<a class="reference internal" href="#datetime.datetime.now" title="datetime.datetime.now"><code class="xref py py-meth docutils literal"><span class="pre">now()</span></code></a></span></p></dd></dl><dl class="classmethod"><dt id="datetime.datetime.fromtimestamp"><span class="yiyi-st" id="yiyi-323"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">fromtimestamp</code><span class="sig-paren">(</span><em>timestamp</em>, <em>tz=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-324">返回与POSIX时间戳对应的本地日期和时间例如<a class="reference internal" href="time.html#time.time" title="time.time"><code class="xref py py-func docutils literal"><span class="pre">time.time()</span></code></a>返回的时间戳。</span><span class="yiyi-st" id="yiyi-325">如果可选参数<em>tz</em><code class="docutils literal"><span class="pre">None</span></code>或未指定,则时间戳将转换为平台的本地日期和时间,返回的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象是naive的。</span></p><p><span class="yiyi-st" id="yiyi-326">如果<em>tz</em>不是<code class="docutils literal"><span class="pre">None</span></code>,则必须是<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的实例,此时时间戳将转换为<em>tz</em>的时区。</span><span class="yiyi-st" id="yiyi-327">在这种情况下,结果等效于<code class="docutils literal"><span class="pre">tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))</span></code></span></p><p><span class="yiyi-st" id="yiyi-328">如果时间戳超出平台C <code class="xref c c-func docutils literal"><span class="pre">localtime()</span></code><code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>函数支持的值的范围,则<a class="reference internal" href="#datetime.datetime.fromtimestamp" title="datetime.datetime.fromtimestamp"><code class="xref py py-meth docutils literal"><span class="pre">fromtimestamp()</span></code></a>可能引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>;如果<code class="xref c c-func docutils literal"><span class="pre">localtime()</span></code><code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>函数失败,则引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a></span><span class="yiyi-st" id="yiyi-329">常见的做法是限制年份在1970和2038之间。</span><span class="yiyi-st" id="yiyi-330">请注意在时间戳中包含闰秒的非POSIX系统上<a class="reference internal" href="#datetime.datetime.fromtimestamp" title="datetime.datetime.fromtimestamp"><code class="xref py py-meth docutils literal"><span class="pre">fromtimestamp()</span></code></a>会忽略闰秒这可能使得两个相差1秒的时间戳产生相同的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-331">另请参见<a class="reference internal" href="#datetime.datetime.utcfromtimestamp" title="datetime.datetime.utcfromtimestamp"><code class="xref py py-meth docutils literal"><span class="pre">utcfromtimestamp()</span></code></a></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-332"><span class="versionmodified">在版本3.3中更改:</span>如果时间戳超出平台C <code class="xref c c-func docutils literal"><span class="pre">localtime ()</span></code><code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>函数支持的值范围,则引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>而不是<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-333"><code class="xref c c-func docutils literal"><span class="pre">localtime()</span></code><code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>失败时引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>而不是<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p></div></dd></dl><dl class="classmethod"><dt id="datetime.datetime.utcfromtimestamp"><span class="yiyi-st" id="yiyi-334"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">utcfromtimestamp</code><span class="sig-paren">(</span><em>timestamp</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-335">返回与POSIX时间戳对应的UTC <a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>,其中<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-336">如果时间戳超出平台C <code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>函数支持的值的范围,则它可能引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>;如果<code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>函数失败,则引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a></span><span class="yiyi-st" id="yiyi-337">常见的做法是限制年份在1970和2038之间。</span></p><p><span class="yiyi-st" id="yiyi-338">要获取aware的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象,请调用<a class="reference internal" href="#datetime.datetime.fromtimestamp" title="datetime.datetime.fromtimestamp"><code class="xref py py-meth docutils literal"><span class="pre">fromtimestamp()</span></code></a></span></p><pre><code class="language-python"><span></span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-339">在POSIX兼容平台上它等效于以下表达式</span></p><pre><code class="language-python"><span></span><span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="n">timestamp</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-340">但后者公式始终支持全部的年份范围:<a class="reference internal" href="#datetime.MINYEAR" title="datetime.MINYEAR"><code class="xref py py-const docutils literal"><span class="pre">MINYEAR</span></code></a><a class="reference internal" href="#datetime.MAXYEAR" title="datetime.MAXYEAR"><code class="xref py py-const docutils literal"><span class="pre">MAXYEAR</span></code></a>之间。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-341"><span class="versionmodified">在版本3.3中更改:</span>如果时间戳超出平台C <code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>函数支持的值范围,则引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>而不是<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-342"><code class="xref c c-func docutils literal"><span class="pre">gmtime()</span></code>失败时引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>而不是<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p></div></dd></dl><dl class="classmethod"><dt id="datetime.datetime.fromordinal"><span class="yiyi-st" id="yiyi-343"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">fromordinal</code><span class="sig-paren">(</span><em>ordinal</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-344">返回对应于普通公历的序数的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>其中第1年的1月1日为序数1。</span><span class="yiyi-st" id="yiyi-345">如果不满足<code class="docutils literal"><span class="pre">1</span> <span class="pre">&lt;=</span> <span class="pre">ordinal</span> <span class="pre">&lt;=</span> <span class="pre">datetime.max.toordinal()</span></code>,则引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-346">结果的hour、minute、second和microsecond都是0并且<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code></span></p></dd></dl><dl class="classmethod"><dt id="datetime.datetime.combine"><span class="yiyi-st" id="yiyi-347"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">combine</code><span class="sig-paren">(</span><em>date</em>, <em>time</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-348">返回一个新的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象,其日期部分等于给定的<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象,其时间部分和<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性等于给定<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-349">对于任何<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象<em>d</em><code class="docutils literal"><span class="pre">d</span> <span class="pre">==</span> <span class="pre">datetime.combine(d.date(),</span> <span class="pre">d.timetz())</span></code></span><span class="yiyi-st" id="yiyi-350">如果date是一个<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象,则会忽略其时间部分和<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性。</span></p></dd></dl><dl class="classmethod"><dt id="datetime.datetime.strptime"><span class="yiyi-st" id="yiyi-351"> <em class="property">classmethod </em><code class="descclassname">datetime.</code><code class="descname">strptime</code><span class="sig-paren">(</span><em>date_string</em>, <em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-352">返回对应于<em>date_string</em><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>,根据<em>format</em>进行解析。</span><span class="yiyi-st" id="yiyi-353">这相当于<code class="docutils literal"><span class="pre">datetime(*(time.strptime(date_string,</span> <span class="pre">format)[0:6]))</span></code></span><span class="yiyi-st" id="yiyi-354">如果<a class="reference internal" href="time.html#time.strptime" title="time.strptime"><code class="xref py py-func docutils literal"><span class="pre">time.strptime()</span></code></a>无法解析date_string和format或者如果返回的值不是时间元组则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-355">有关格式化指令的完整列表,请参见<a class="reference internal" href="#strftime-strptime-behavior"><span>strftime()和strptime()的行为</span></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-356">类属性:</span></p><dl class="attribute"><dt id="datetime.datetime.min"><span class="yiyi-st" id="yiyi-357"> <code class="descclassname">datetime.</code><code class="descname">min</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-358">可表示的最早<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><code class="docutils literal"><span class="pre">datetime(MINYEAR,</span> <span class="pre">1,</span> <span class="pre">1,</span> <span class="pre">tzinfo=None)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.max"><span class="yiyi-st" id="yiyi-359"> <code class="descclassname">datetime.</code><code class="descname">max</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-360">可表示的最晚<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><code class="docutils literal"><span class="pre">datetime(MAXYEAR,</span> <span class="pre">12,</span> <span class="pre">31,</span> <span class="pre">23,</span> <span class="pre">59,</span> <span class="pre">59,</span> <span class="pre">999999,</span> <span class="pre">tzinfo=None)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.resolution"><span class="yiyi-st" id="yiyi-361"> <code class="descclassname">datetime.</code><code class="descname">resolution</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-362">不相等的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象之间的最小可能差值,<code class="docutils literal"><span class="pre">timedelta(microseconds=1)</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-363">实例属性(只读):</span></p><dl class="attribute"><dt id="datetime.datetime.year"><span class="yiyi-st" id="yiyi-364"> <code class="descclassname">datetime.</code><code class="descname">year</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-365"><a class="reference internal" href="#datetime.MINYEAR" title="datetime.MINYEAR"><code class="xref py py-const docutils literal"><span class="pre">MINYEAR</span></code></a><a class="reference internal" href="#datetime.MAXYEAR" title="datetime.MAXYEAR"><code class="xref py py-const docutils literal"><span class="pre">MAXYEAR</span></code></a>之间,包括这两个值。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.month"><span class="yiyi-st" id="yiyi-366"> <code class="descclassname">datetime.</code><code class="descname">month</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-367">1至12之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.day"><span class="yiyi-st" id="yiyi-368"> <code class="descclassname">datetime.</code><code class="descname">day</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-369">在1和给定年的给定月份中的天数之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.hour"><span class="yiyi-st" id="yiyi-370"> <code class="descclassname">datetime.</code><code class="descname">hour</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-371"><code class="docutils literal"><span class="pre">range(24)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.minute"><span class="yiyi-st" id="yiyi-372"> <code class="descclassname">datetime.</code><code class="descname">minute</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-373"><code class="docutils literal"><span class="pre">range(60)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.second"><span class="yiyi-st" id="yiyi-374"> <code class="descclassname">datetime.</code><code class="descname">second</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-375"><code class="docutils literal"><span class="pre">range(60)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.microsecond"><span class="yiyi-st" id="yiyi-376"> <code class="descclassname">datetime.</code><code class="descname">microsecond</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-377"><code class="docutils literal"><span class="pre">range(1000000)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.datetime.tzinfo"><span class="yiyi-st" id="yiyi-378"> <code class="descclassname">datetime.</code><code class="descname">tzinfo</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-379">作为<em>tzinfo</em>参数传递给<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>构造函数的对象,如果没有传递则为<code class="docutils literal"><span class="pre">None</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-380">支持的操作:</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-381">操作</span></th><th class="head"><span class="yiyi-st" id="yiyi-382">结果</span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-383"><code class="docutils literal"><span class="pre">datetime2</span> <span class="pre">=</span> <span class="pre">datetime1</span> <span class="pre">+</span> <span class="pre">timedelta</span></code></span></td><td><span class="yiyi-st" id="yiyi-384">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-385"><code class="docutils literal"><span class="pre">datetime2</span> <span class="pre">=</span> <span class="pre">datetime1</span> <span class="pre">-</span> <span class="pre">timedelta</span></code></span></td><td><span class="yiyi-st" id="yiyi-386">2</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-387"><code class="docutils literal"><span class="pre">timedelta</span> <span class="pre">=</span> <span class="pre">datetime1</span> <span class="pre">-</span> <span class="pre">datetime2</span></code></span></td><td><span class="yiyi-st" id="yiyi-388">3</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-389"><code class="docutils literal"><span class="pre">datetime1</span> <span class="pre">&lt;</span> <span class="pre">datetime2</span></code></span></td><td><span class="yiyi-st" id="yiyi-390">比较<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a></span><span class="yiyi-st" id="yiyi-391">4</span></td></tr></tbody></table><ol class="arabic"><li><p class="first"><span class="yiyi-st" id="yiyi-392">datetime2是从datetime1移除timedelta的时间如果<code class="docutils literal"><span class="pre">timedelta.days</span></code> &gt; 0则向前移动如果<code class="docutils literal"><span class="pre">timedelta.days</span></code> &lt; 0则向后移动。</span><span class="yiyi-st" id="yiyi-393">结果具有与输入datetime相同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性并且之后datetime2 - datetime1 == timedelta。</span><span class="yiyi-st" id="yiyi-394">如果datetime2.year小于<a class="reference internal" href="#datetime.MINYEAR" title="datetime.MINYEAR"><code class="xref py py-const docutils literal"><span class="pre">MINYEAR</span></code></a>或大于<a class="reference internal" href="#datetime.MAXYEAR" title="datetime.MAXYEAR"><code class="xref py py-const docutils literal"><span class="pre">MAXYEAR</span></code></a>,则会引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a></span><span class="yiyi-st" id="yiyi-395">请注意即使输入是aware对象也不会执行时区调整。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-396">计算datetime2使datetime2 + timedelta == datetime1。</span><span class="yiyi-st" id="yiyi-397">与加法一样,结果具有与输入日期时间相同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性即使输入是aware的也不执行时区调整。</span><span class="yiyi-st" id="yiyi-398">这不完全等同于 datetime1 + (-timedelta),因为单独的-timedelta可能会溢出而在此情况下datetime1 - timedelta不会。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-399">只有当两个操作数都是naive的或者两者都是aware的时才定义从<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>减去一个<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a></span><span class="yiyi-st" id="yiyi-400">如果一个是aware的而另一个是naive的则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-401">如果两者都是naive的或者两者都是aware的且具有相同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性,则会忽略<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性,结果是一个<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象<em>t</em>,使得<code class="docutils literal"><span class="pre">datetime2</span> <span class="pre">+</span> <span class="pre">t</span> <span class="pre">==</span> <span class="pre">datetime1</span></code></span><span class="yiyi-st" id="yiyi-402">在这种情况下不进行时区调整。</span></p><p><span class="yiyi-st" id="yiyi-403">如果两者都是aware的且具有不同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性,则<code class="docutils literal"><span class="pre">a-b</span></code>表现得好像<em>a</em><em>b</em>被首先转换成naive的UTC时间。</span><span class="yiyi-st" id="yiyi-404">结果是<code class="docutils literal"><span class="pre">(a.replace(tzinfo=None)</span> <span class="pre">-</span> <span class="pre">a.utcoffset())</span> <span class="pre">-</span> <span class="pre">(b.replace(tzinfo=None)</span> <span class="pre">-</span> <span class="pre">b.utcoffset())</span></code>,除非具体的实现永远不会溢出。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-405"><em>datetime1</em>在时间上位于<em>datetime2</em> 之前,则认为<em>datetime1</em>小于<em>datetime2</em></span></p><p><span class="yiyi-st" id="yiyi-406">如果一个比较数据是naive的而另一个是aware的则尝试进行顺序比较时会产生<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span><span class="yiyi-st" id="yiyi-407">对于相等性比较naive实例永远不等于aware实例。</span></p><p><span class="yiyi-st" id="yiyi-408">如果两个比较数都是aware的并且具有相同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性,则忽略共同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性,并比较基本的时间数据。</span><span class="yiyi-st" id="yiyi-409">如果两个比较数都是aware并且具有不同的<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性则首先通过减去它们的UTC偏移<code class="docutils literal"><span class="pre">self.utcoffset()</span></code>获得)来调整比较数。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-410"><span class="versionmodified">在版本3.3中已更改:</span>naive的和aware的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例之间的相等性比较不引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span></p></div><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-411">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-412">为了停止比较回退到默认的比较对象地址的方式,如果另一比较对象不是<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象datetime比较通常引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span><span class="yiyi-st" id="yiyi-413">但是,如果另一个比较对象具有<code class="xref py py-meth docutils literal"><span class="pre">timetuple()</span></code>属性,则会返回<code class="docutils literal"><span class="pre">NotImplemented</span></code></span><span class="yiyi-st" id="yiyi-414">这个钩子给其他种类的日期对象实现混合型比较的机会。</span><span class="yiyi-st" id="yiyi-415">如果不是,当将<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象与不同类型的对象进行比较时,则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>,除非比较为<code class="docutils literal"><span class="pre">==</span></code><code class="docutils literal"><span class="pre">!=</span></code></span><span class="yiyi-st" id="yiyi-416">后一种情况分别返回<a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal"><span class="pre">False</span></code></a><a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal"><span class="pre">True</span></code></a></span></p></div></li></ol><p><span class="yiyi-st" id="yiyi-417"><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象可以用作字典的键。</span><span class="yiyi-st" id="yiyi-418">在布尔上下文中,所有<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象都被视为真。</span></p><p><span class="yiyi-st" id="yiyi-419">实例方法:</span></p><dl class="method"><dt id="datetime.datetime.date"><span class="yiyi-st" id="yiyi-420"> <code class="descclassname">datetime.</code><code class="descname">date</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-421">返回具有相同年、月和日的<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象。</span></p></dd></dl><dl class="method"><dt id="datetime.datetime.time"><span class="yiyi-st" id="yiyi-422"> <code class="descclassname">datetime.</code><code class="descname">time</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-423">返回具有相同小时、分钟、秒和微秒的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-424"><a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-425">另请参见方法<a class="reference internal" href="#datetime.datetime.timetz" title="datetime.datetime.timetz"><code class="xref py py-meth docutils literal"><span class="pre">timetz()</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.timetz"><span class="yiyi-st" id="yiyi-426"> <code class="descclassname">datetime.</code><code class="descname">timetz</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-427">返回具有相同小时、分钟、秒、微秒和tzinfo属性的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-428">另请参见方法<a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-meth docutils literal"><span class="pre">time()</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.replace"><span class="yiyi-st" id="yiyi-429"> <code class="descclassname">datetime.</code><code class="descname">replace</code><span class="sig-paren">(</span><span class="optional">[</span><em>year</em><span class="optional">[</span>, <em>month</em><span class="optional">[</span>, <em>day</em><span class="optional">[</span>, <em>hour</em><span class="optional">[</span>, <em>minute</em><span class="optional">[</span>, <em>second</em><span class="optional">[</span>, <em>microsecond</em><span class="optional">[</span>, <em>tzinfo</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-430">使用相同的属性返回一个日期时间,除了那些通过指定任何关键字参数给出新值的属性。</span><span class="yiyi-st" id="yiyi-431">请注意,可以指定<code class="docutils literal"><span class="pre">tzinfo=None</span></code>来从aware的datetime创建一个naive的datetime而不需对date和time数据进行转换。</span></p></dd></dl><dl class="method"><dt id="datetime.datetime.astimezone"><span class="yiyi-st" id="yiyi-432"> <code class="descclassname">datetime.</code><code class="descname">astimezone</code><span class="sig-paren">(</span><em>tz=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-433">返回带有新<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性<em>tz</em><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象,调整日期和时间数据使结果与<em>self </em>的UTC时间相同但为<em>tz</em>的本地时间。</span></p><p><span class="yiyi-st" id="yiyi-434">如果提供,<em>tz</em>必须是<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的实例,并且其<a class="reference internal" href="#datetime.datetime.utcoffset" title="datetime.datetime.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a><a class="reference internal" href="#datetime.datetime.dst" title="datetime.datetime.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>方法不得返回<code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-435"><em>self</em>必须是aware的<code class="docutils literal"><span class="pre">self.tzinfo</span></code>不能是<code class="docutils literal"><span class="pre">None</span></code>,以及<code class="docutils literal"><span class="pre">self.utcoffset()</span></code>不能返回<code class="docutils literal"><span class="pre">None</span></code>)。</span></p><p><span class="yiyi-st" id="yiyi-436">如果不带参数调用(或<code class="docutils literal"><span class="pre">tz=None</span></code>),则假定使用系统本地时区。</span><span class="yiyi-st" id="yiyi-437">转换后的datetime实例的<code class="docutils literal"><span class="pre">.tzinfo</span></code>属性将设置为<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>的实例,其带有从操作系统获取的时区名称和偏移量。</span></p><p><span class="yiyi-st" id="yiyi-438">如果<code class="docutils literal"><span class="pre">self.tzinfo</span></code><em>tz</em>,则<code class="docutils literal"><span class="pre">self.astimezone(tz)</span></code>等于<em>self</em>:日期调整和时间数据不会调整。</span><span class="yiyi-st" id="yiyi-439">否则结果是时区<em>tz</em>中的本地时间,表示与<em>self</em>相同的UTC时间<code class="docutils literal"><span class="pre">astz</span> <span class="pre">=</span> <span class="pre">dt.astimezone(tz)</span></code>之后,<code class="docutils literal"><span class="pre">astz</span> <span class="pre">-</span> <span class="pre">astz.utcoffset()</span></code>通常具有与<code class="docutils literal"><span class="pre">dt</span> <span class="pre">-</span> <span class="pre">dt.utcoffset()</span></code>相同的日期和时间数据。</span><span class="yiyi-st" id="yiyi-440"><a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>的讨论解释了无法实现的在夏令时转换边界的情况(仅当<em>tz</em>同时建模标准时和夏令时的时候才出现问题)。</span></p><p><span class="yiyi-st" id="yiyi-441">如果你只想在不调整日期和时间数据的情况下将时区对象<em>tz</em>附加到datetime<em>dt</em>,请使用<code class="docutils literal"><span class="pre">dt.replace(tzinfo=tz)</span></code></span><span class="yiyi-st" id="yiyi-442">如果你只想从aware的datetime <em>dt</em>中删除时区对象而不转换日期和时间数据,请使用<code class="docutils literal"><span class="pre">dt.replace(tzinfo=None)</span></code></span></p><p><span class="yiyi-st" id="yiyi-443">请注意,可以在<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类中覆盖默认的<a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">tzinfo.fromutc()</span></code></a>方法,以影响<a class="reference internal" href="#datetime.datetime.astimezone" title="datetime.datetime.astimezone"><code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code></a>返回的结果。</span><span class="yiyi-st" id="yiyi-444">忽略错误情况,<a class="reference internal" href="#datetime.datetime.astimezone" title="datetime.datetime.astimezone"><code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code></a>的行为如下:</span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">astimezone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tzinfo</span> <span class="ow">is</span> <span class="n">tz</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="c1"># Convert self to UTC, and attach the new time zone object.</span>
<span class="n">utc</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">utcoffset</span><span class="p">())</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">tz</span><span class="p">)</span>
<span class="c1"># Convert from UTC to tz's local time.</span>
<span class="k">return</span> <span class="n">tz</span><span class="o">.</span><span class="n">fromutc</span><span class="p">(</span><span class="n">utc</span><span class="p">)</span>
</code></pre><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-445"><span class="versionmodified">在版本3.3中更改:</span> <em>tz</em>现在可以省略。</span></p></div></dd></dl><dl class="method"><dt id="datetime.datetime.utcoffset"><span class="yiyi-st" id="yiyi-446"> <code class="descclassname">datetime.</code><code class="descname">utcoffset</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-447">如果<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code>,则返回<code class="docutils literal"><span class="pre">None</span></code>,否则返回<code class="docutils literal"><span class="pre">self.tzinfo.utcoffset(self)</span></code>;如果后者未返回<code class="docutils literal"><span class="pre">None</span></code>或表示小于一天的整数分钟的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,则引发一个异常。</span></p></dd></dl><dl class="method"><dt id="datetime.datetime.dst"><span class="yiyi-st" id="yiyi-448"> <code class="descclassname">datetime.</code><code class="descname">dst</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-449">如果<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code>,则返回<code class="docutils literal"><span class="pre">None</span></code>,否则返回<code class="docutils literal"><span class="pre">self.tzinfo.dst(self)</span></code>;如果后者未返回<code class="docutils literal"><span class="pre">None</span></code>或表示小于一天的整数分钟的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,则引发一个异常。</span></p></dd></dl><dl class="method"><dt id="datetime.datetime.tzname"><span class="yiyi-st" id="yiyi-450"> <code class="descclassname">datetime.</code><code class="descname">tzname</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-451">如果<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code>,则返回<code class="docutils literal"><span class="pre">None</span></code>,否则返回<code class="docutils literal"><span class="pre">self.tzinfo.tzname(self)</span></code>;如果后者不返回<code class="docutils literal"><span class="pre">None</span></code>或字符串对象,则引发一个异常。</span></p></dd></dl><dl class="method"><dt id="datetime.datetime.timetuple"><span class="yiyi-st" id="yiyi-452"> <code class="descclassname">datetime.</code><code class="descname">timetuple</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-453">返回一个<a class="reference internal" href="time.html#time.struct_time" title="time.struct_time"><code class="xref py py-class docutils literal"><span class="pre">time.struct_time</span></code></a>,类似<a class="reference internal" href="time.html#time.localtime" title="time.localtime"><code class="xref py py-func docutils literal"><span class="pre">time.localtime()</span></code></a>的返回值。</span><span class="yiyi-st" id="yiyi-454"><code class="docutils literal"><span class="pre">d.timetuple()</span></code>等同于<code class="docutils literal"><span class="pre">time.struct_time((d.year,</span> <span class="pre">d.month,</span> <span class="pre">d.day,</span> <span class="pre">d.hour,</span> <span class="pre">d.minute,</span> <span class="pre">d.second,</span> <span class="pre">d.weekday(),</span> <span class="pre">yday,</span> <span class="pre">dst))</span></code>,其中<code class="docutils literal"><span class="pre">yday</span> <span class="pre">=</span> <span class="pre">d.toordinal()</span> <span class="pre">-</span> <span class="pre">date(d.year,</span> <span class="pre">1,</span> <span class="pre">1).toordinal()</span> <span class="pre">+</span> <span class="pre">1</span></code>当前年份中的天数1月1日为开始的第<code class="docutils literal"><span class="pre">1</span></code>天。</span><span class="yiyi-st" id="yiyi-455">根据<a class="reference internal" href="#datetime.datetime.dst" title="datetime.datetime.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>方法设置结果的<code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>标志:如果<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code><a class="reference internal" href="#datetime.datetime.dst" title="datetime.datetime.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>返回<code class="docutils literal"><span class="pre">None</span></code>,则<code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>设置为<code class="docutils literal"><span class="pre">-1</span></code>;如果<a class="reference internal" href="#datetime.datetime.dst" title="datetime.datetime.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>返回非零值,<code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>设置为<code class="docutils literal"><span class="pre">1</span></code>;否则<code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>设置为<code class="docutils literal"><span class="pre">0</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.utctimetuple"><span class="yiyi-st" id="yiyi-456"> <code class="descclassname">datetime.</code><code class="descname">utctimetuple</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-457">如果<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例<em>d</em>是naive的它等同于<code class="docutils literal"><span class="pre">d.timetuple()</span></code>,但是无论<code class="docutils literal"><span class="pre">d.dst()</span></code>返回什么,<code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>都被强制设置为0。</span><span class="yiyi-st" id="yiyi-458">对于UTC时间DST始终不会生效。</span></p><p><span class="yiyi-st" id="yiyi-459">如果<em>d</em>是aware的则通过减去<code class="docutils literal"><span class="pre">d.utcoffset()</span></code>归一化<em>d</em>,并返回归一化的时间<a class="reference internal" href="time.html#time.struct_time" title="time.struct_time"><code class="xref py py-class docutils literal"><span class="pre">time.struct_time</span></code></a></span><span class="yiyi-st" id="yiyi-460"><code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>被强制为0。</span><span class="yiyi-st" id="yiyi-461">请注意,如果<em>d</em>.year是<code class="docutils literal"><span class="pre">MINYEAR</span></code><code class="docutils literal"><span class="pre">MAXYEAR</span></code>且UTC调整溢出超过一年的边界则可能会引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.toordinal"><span class="yiyi-st" id="yiyi-462"> <code class="descclassname">datetime.</code><code class="descname">toordinal</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-463">返回日期的公历序数。</span><span class="yiyi-st" id="yiyi-464">等同于<code class="docutils literal"><span class="pre">self.date().toordinal()</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.timestamp"><span class="yiyi-st" id="yiyi-465"> <code class="descclassname">datetime.</code><code class="descname">timestamp</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-466">返回对应于<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例的POSIX时间戳。</span><span class="yiyi-st" id="yiyi-467">返回值类似于<a class="reference internal" href="time.html#time.time" title="time.time"><code class="xref py py-func docutils literal"><span class="pre">time.time()</span></code></a>返回的<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-468">Naive的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例假设表示本地时间并且此方法依赖于平台C <code class="xref c c-func docutils literal"><span class="pre">mktime()</span></code>函数来执行转换。</span><span class="yiyi-st" id="yiyi-469">由于在许多平台上,<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>支持的值范围比<code class="xref c c-func docutils literal"><span class="pre">mktime()</span></code>的范围更广,因此此方法可能会在很远的过去或很远的未来时间引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-470">对于aware的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例,返回值计算为:</span></p><pre><code class="language-python"><span></span><span class="p">(</span><span class="n">dt</span> <span class="o">-</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">))</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span>
</code></pre><div class="versionadded"><p><span class="yiyi-st" id="yiyi-471"><span class="versionmodified">版本3.3中的新功能。</span></span></p></div><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-472">注意</span></p><p><span class="yiyi-st" id="yiyi-473">没有任何方法直接从表示UTC时间的一个naive的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例获取POSIX时间戳。</span><span class="yiyi-st" id="yiyi-474">如果你的应用程序使用此约定并且你的系统时区未设置为UTC你可以通过提供<code class="docutils literal"><span class="pre">tzinfo=timezone.utc</span></code>来获取POSIX时间戳</span></p><pre><code class="language-python"><span></span><span class="n">timestamp</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()</span>
</code></pre><p><span class="yiyi-st" id="yiyi-475">或直接计算时间戳:</span></p><div class="last highlight-python3"><div class="highlight"><pre><span></span><span class="n">timestamp</span> <span class="o">=</span> <span class="p">(</span><span class="n">dt</span> <span class="o">-</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="o">/</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</pre></div></div></div></dd></dl><dl class="method"><dt id="datetime.datetime.weekday"><span class="yiyi-st" id="yiyi-476"> <code class="descclassname">datetime.</code><code class="descname">weekday</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-477">将星期几作为整数返回其中星期一为0星期日为6。</span><span class="yiyi-st" id="yiyi-478">等同于<code class="docutils literal"><span class="pre">self.date().weekday()</span></code></span><span class="yiyi-st" id="yiyi-479">另请参见<a class="reference internal" href="#datetime.datetime.isoweekday" title="datetime.datetime.isoweekday"><code class="xref py py-meth docutils literal"><span class="pre">isoweekday()</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.isoweekday"><span class="yiyi-st" id="yiyi-480"> <code class="descclassname">datetime.</code><code class="descname">isoweekday</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-481">将星期几作为整数返回其中星期一为1星期日为7。</span><span class="yiyi-st" id="yiyi-482">等同于<code class="docutils literal"><span class="pre">self.date().isoweekday()</span></code></span><span class="yiyi-st" id="yiyi-483">另请参阅<a class="reference internal" href="#datetime.datetime.weekday" title="datetime.datetime.weekday"><code class="xref py py-meth docutils literal"><span class="pre">weekday()</span></code></a><a class="reference internal" href="#datetime.datetime.isocalendar" title="datetime.datetime.isocalendar"><code class="xref py py-meth docutils literal"><span class="pre">isocalendar()</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.isocalendar"><span class="yiyi-st" id="yiyi-484"> <code class="descclassname">datetime.</code><code class="descname">isocalendar</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-485">返回3元组ISO年ISO周编号ISO工作日</span><span class="yiyi-st" id="yiyi-486">等同于<code class="docutils literal"><span class="pre">self.date().isocalendar()</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.isoformat"><span class="yiyi-st" id="yiyi-487"> <code class="descclassname">datetime.</code><code class="descname">isoformat</code><span class="sig-paren">(</span><em>sep='T'</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-488">返回以ISO 8601 格式YYYY-MM-DDTHH:MM:SS.mmmmmm表示日期和时间的字符串如果<a class="reference internal" href="#datetime.datetime.microsecond" title="datetime.datetime.microsecond"><code class="xref py py-attr docutils literal"><span class="pre">microsecond</span></code></a>为0则以YYYY-MM-DDTHH:MM:SS的格式。</span></p><p><span class="yiyi-st" id="yiyi-489">如果<a class="reference internal" href="#datetime.datetime.utcoffset" title="datetime.datetime.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>不返回<code class="docutils literal"><span class="pre">None</span></code>则会附加一个6个字符的字符串带符号的小时和分钟为单位提供UTC偏移量YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM如果<a class="reference internal" href="#datetime.datetime.microsecond" title="datetime.datetime.microsecond"><code class="xref py py-attr docutils literal"><span class="pre">microsecond</span></code></a>为0则为YYYY-MM-DDTHH:MM:SS+HH:MM。</span></p><p><span class="yiyi-st" id="yiyi-490">可选参数<em>sep</em>(默认为<code class="docutils literal"><span class="pre">'T'</span></code>)是一个单字符分隔符,位于结果的日期和时间部分之间。</span><span class="yiyi-st" id="yiyi-491">例如,</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">tzinfo</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">datetime</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">TZ</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span><span class="o">=-</span><span class="mi">399</span><span class="p">)</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">datetime</span><span class="p">(</span><span class="mi">2002</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">TZ</span><span class="p">())</span><span class="o">.</span><span class="n">isoformat</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="go">'2002-12-25 00:00:00-06:39'</span>
</code></pre></dd></dl><dl class="method"><dt id="datetime.datetime.__str__"><span class="yiyi-st" id="yiyi-492"> <code class="descclassname">datetime.</code><code class="descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-493">对于<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例<em>d</em><code class="docutils literal"><span class="pre">str(d)</span></code>等效于<code class="docutils literal"><span class="pre">d.isoformat('</span> <span class="pre">')</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.ctime"><span class="yiyi-st" id="yiyi-494"> <code class="descclassname">datetime.</code><code class="descname">ctime</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-495">返回一个表示日期和时间的字符串,例如<code class="docutils literal"><span class="pre">datetime(2002,</span> <span class="pre">12,</span> <span class="pre">4,</span> <span class="pre">20,</span> <span class="pre">30,</span> <span class="pre">40).ctime()</span> <span class="pre">==</span> <span class="pre">'Wed</span> <span class="pre">Dec</span> <span class="pre">4</span> <span class="pre">20:30:40</span> <span class="pre">2002'</span></code></span><span class="yiyi-st" id="yiyi-496">在原生的C函数<code class="xref c c-func docutils literal"><span class="pre">ctime()</span></code><a class="reference internal" href="time.html#time.ctime" title="time.ctime"><code class="xref py py-func docutils literal"><span class="pre">time.ctime()</span></code></a>调用它,但是<a class="reference internal" href="#datetime.datetime.ctime" title="datetime.datetime.ctime"><code class="xref py py-meth docutils literal"><span class="pre">datetime.ctime()</span></code></a> 不调用它遵守C标准的平台上<code class="docutils literal"><span class="pre">d.ctime()</span></code>等效于<code class="docutils literal"><span class="pre">time.ctime(time.mktime(d.timetuple()))</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.strftime"><span class="yiyi-st" id="yiyi-497"> <code class="descclassname">datetime.</code><code class="descname">strftime</code><span class="sig-paren">(</span><em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-498">返回一个表示日期和时间的字符串,由显式的格式字符串控制。</span><span class="yiyi-st" id="yiyi-499">有关格式化指令的完整列表,请参见<a class="reference internal" href="#strftime-strptime-behavior"><span>strftime()和strptime()的行为</span></a></span></p></dd></dl><dl class="method"><dt id="datetime.datetime.__format__"><span class="yiyi-st" id="yiyi-500"> <code class="descclassname">datetime.</code><code class="descname">__format__</code><span class="sig-paren">(</span><em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-501"><a class="reference internal" href="#datetime.datetime.strftime" title="datetime.datetime.strftime"><code class="xref py py-meth docutils literal"><span class="pre">datetime.strftime()</span></code></a>相同。</span><span class="yiyi-st" id="yiyi-502">这使得可以在使用<a class="reference internal" href="stdtypes.html#str.format" title="str.format"><code class="xref py py-meth docutils literal"><span class="pre">str.format()</span></code></a>时为<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象指定格式字符串。</span><span class="yiyi-st" id="yiyi-503">有关格式化指令的完整列表,请参见<a class="reference internal" href="#strftime-strptime-behavior"><span>strftime()和strptime()的行为</span></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-504">使用日期时间对象的示例:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">time</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Using datetime.combine()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span> <span class="o">=</span> <span class="n">date</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">time</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">datetime</span><span class="o">.</span><span class="n">combine</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
<span class="go">datetime.datetime(2005, 7, 14, 12, 30)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Using datetime.now() or datetime.utcnow()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
<span class="go">datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span>
<span class="go">datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Using datetime.strptime()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="s2">"21/11/06 16:30"</span><span class="p">,</span> <span class="s2">"</span><span class="si">%d</span><span class="s2">/%m/%y %H:%M"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt</span>
<span class="go">datetime.datetime(2006, 11, 21, 16, 30)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Using datetime.timetuple() to get tuple of all attributes</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">tt</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">timetuple</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">tt</span><span class="p">:</span>
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">it</span><span class="p">)</span>
<span class="gp">...</span>
<span class="go">2006 # year</span>
<span class="go">11 # month</span>
<span class="go">21 # day</span>
<span class="go">16 # hour</span>
<span class="go">30 # minute</span>
<span class="go">0 # second</span>
<span class="go">1 # weekday (0 = Monday)</span>
<span class="go">325 # number of days since 1st January</span>
<span class="go">-1 # dst - method tzinfo.dst() returned None</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Date in ISO format</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ic</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">isocalendar</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">ic</span><span class="p">:</span>
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">it</span><span class="p">)</span>
<span class="gp">...</span>
<span class="go">2006 # ISO year</span>
<span class="go">47 # ISO week</span>
<span class="go">2 # ISO weekday</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Formatting datetime</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%A, </span><span class="si">%d</span><span class="s2">. %B %Y %I:%M%p"</span><span class="p">)</span>
<span class="go">'Tuesday, 21. November 2006 04:30PM'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">'The </span><span class="si">{1}</span><span class="s1"> is {0:</span><span class="si">%d</span><span class="s1">}, the </span><span class="si">{2}</span><span class="s1"> is {0:%B}, the </span><span class="si">{3}</span><span class="s1"> is {0:%I:%M%p}.'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s2">"day"</span><span class="p">,</span> <span class="s2">"month"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">)</span>
<span class="go">'The day is 21, the month is November, the time is 04:30PM.'</span>
</code></pre><p><span class="yiyi-st" id="yiyi-505">在tzinfo中使用datetime</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">tzinfo</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">GMT1</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dst</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="c1"># DST starts last Sunday in March</span>
<span class="gp">... </span> <span class="n">d</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1"># ends last Sunday in October</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">dston</span> <span class="o">=</span> <span class="n">d</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">d</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="n">d</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">dstoff</span> <span class="o">=</span> <span class="n">d</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">d</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dston</span> <span class="o">&lt;=</span> <span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">dstoff</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">else</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="s2">"GMT +1"</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">GMT2</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dst</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="n">d</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">dston</span> <span class="o">=</span> <span class="n">d</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">d</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="n">d</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">dstoff</span> <span class="o">=</span> <span class="n">d</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">d</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dston</span> <span class="o">&lt;=</span> <span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">dstoff</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">else</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="s2">"GMT +2"</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">gmt1</span> <span class="o">=</span> <span class="n">GMT1</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Daylight Saving Time</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt1</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">2006</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">gmt1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt1</span><span class="o">.</span><span class="n">dst</span><span class="p">()</span>
<span class="go">datetime.timedelta(0)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt1</span><span class="o">.</span><span class="n">utcoffset</span><span class="p">()</span>
<span class="go">datetime.timedelta(0, 3600)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt2</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">2006</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">13</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">gmt1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt2</span><span class="o">.</span><span class="n">dst</span><span class="p">()</span>
<span class="go">datetime.timedelta(0, 3600)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt2</span><span class="o">.</span><span class="n">utcoffset</span><span class="p">()</span>
<span class="go">datetime.timedelta(0, 7200)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Convert datetime to another time zone</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt3</span> <span class="o">=</span> <span class="n">dt2</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">GMT2</span><span class="p">())</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt3</span>
<span class="go">datetime.datetime(2006, 6, 14, 14, 0, tzinfo=&lt;GMT2 object at 0x...&gt;)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt2</span>
<span class="go">datetime.datetime(2006, 6, 14, 13, 0, tzinfo=&lt;GMT1 object at 0x...&gt;)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dt2</span><span class="o">.</span><span class="n">utctimetuple</span><span class="p">()</span> <span class="o">==</span> <span class="n">dt3</span><span class="o">.</span><span class="n">utctimetuple</span><span class="p">()</span>
<span class="go">True</span>
</code></pre></div><div class="section" id="time-objects"><h2><span class="yiyi-st" id="yiyi-506">8.1.5. <a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象</span></h2><p><span class="yiyi-st" id="yiyi-507">Time对象表示一天中的本地时间独立于任何特定的日子并且可以通过<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>对象进行调整。</span></p><dl class="class"><dt id="datetime.time"><span class="yiyi-st" id="yiyi-508"> <em class="property">class </em><code class="descclassname">datetime.</code><code class="descname">time</code><span class="sig-paren">(</span><em>hour=0</em>, <em>minute=0</em>, <em>second=0</em>, <em>microsecond=0</em>, <em>tzinfo=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-509">所有参数都是可选的。</span><span class="yiyi-st" id="yiyi-510"><em>tzinfo</em>可以是<code class="docutils literal"><span class="pre">None</span></code><a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的实例。</span><span class="yiyi-st" id="yiyi-511">其余的参数可以是以下范围内的整数:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-512"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">hour</span> <span class="pre">&lt;</span> <span class="pre">24</span></code></span></li><li><span class="yiyi-st" id="yiyi-513"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">minute</span> <span class="pre">&lt;</span> <span class="pre">60</span></code></span></li><li><span class="yiyi-st" id="yiyi-514"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">second</span> <span class="pre">&lt;</span> <span class="pre">60</span></code></span></li><li><span class="yiyi-st" id="yiyi-515"><code class="docutils literal"><span class="pre">0</span> <span class="pre">&lt;=</span> <span class="pre">microsecond</span> <span class="pre">&lt;</span> <span class="pre">1000000</span></code>.</span></li></ul><p><span class="yiyi-st" id="yiyi-516">如果给出了这些范围之外的参数,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span><span class="yiyi-st" id="yiyi-517">所有默认值为<code class="docutils literal"><span class="pre">0</span></code>,除了<em>tzinfo</em>默认为<a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-518">类属性:</span></p><dl class="attribute"><dt id="datetime.time.min"><span class="yiyi-st" id="yiyi-519"> <code class="descclassname">time.</code><code class="descname">min</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-520">可表示的最早的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a><code class="docutils literal"><span class="pre">time(0,</span> <span class="pre">0,</span> <span class="pre">0,</span> <span class="pre">0)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.time.max"><span class="yiyi-st" id="yiyi-521"> <code class="descclassname">time.</code><code class="descname">max</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-522">可表示的最晚的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a><code class="docutils literal"><span class="pre">time(23,</span> <span class="pre">59,</span> <span class="pre">59,</span> <span class="pre">999999)</span></code></span></p></dd></dl><dl class="attribute"><dt id="datetime.time.resolution"><span class="yiyi-st" id="yiyi-523"> <code class="descclassname">time.</code><code class="descname">resolution</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-524">不相等的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象之间的最小可能差,即<code class="docutils literal"><span class="pre">timedelta(microseconds=1)</span></code>,还要注意<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>不支持算术操作。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-525">实例属性(只读):</span></p><dl class="attribute"><dt id="datetime.time.hour"><span class="yiyi-st" id="yiyi-526"> <code class="descclassname">time.</code><code class="descname">hour</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-527"><code class="docutils literal"><span class="pre">range(24)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.time.minute"><span class="yiyi-st" id="yiyi-528"> <code class="descclassname">time.</code><code class="descname">minute</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-529"><code class="docutils literal"><span class="pre">range(60)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.time.second"><span class="yiyi-st" id="yiyi-530"> <code class="descclassname">time.</code><code class="descname">second</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-531"><code class="docutils literal"><span class="pre">range(60)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.time.microsecond"><span class="yiyi-st" id="yiyi-532"> <code class="descclassname">time.</code><code class="descname">microsecond</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-533"><code class="docutils literal"><span class="pre">range(1000000)</span></code>之间。</span></p></dd></dl><dl class="attribute"><dt id="datetime.time.tzinfo"><span class="yiyi-st" id="yiyi-534"> <code class="descclassname">time.</code><code class="descname">tzinfo</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-535">作为tzinfo参数传递给<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>构造函数的对象,如果没有传递则为<code class="docutils literal"><span class="pre">None</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-536">支持的操作:</span></p><ul><li><p class="first"><span class="yiyi-st" id="yiyi-537"><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>比较,其中如果<em>a</em>在时间上位于<em>b</em>之前,则认为<em>a</em>小于<em>b</em></span><span class="yiyi-st" id="yiyi-538">如果一个比较数据是naive的而另一个是aware的则尝试进行顺序比较时会产生<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span><span class="yiyi-st" id="yiyi-539">对于相等性比较naive实例永远不等于aware实例。</span></p><p><span class="yiyi-st" id="yiyi-540">如果两个比较数都是aware的并且具有相同的<a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性,则忽略共同的<a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性并比较基本的times数据。</span><span class="yiyi-st" id="yiyi-541">如果两个比较数都是aware并且具有不同的<a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性则首先通过减去它们的UTC偏移<code class="docutils literal"><span class="pre">self.utcoffset()</span></code>获得)来调整比较数。</span><span class="yiyi-st" id="yiyi-542">为了阻止混合类型之间的比较回退到默认的以对象地址进行的比较,当将<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象与不同类型的对象进行比较时,会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>除非比较是<code class="docutils literal"><span class="pre">==</span></code><code class="docutils literal"><span class="pre">!=</span></code></span><span class="yiyi-st" id="yiyi-543">后一种情况分别返回<a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal"><span class="pre">False</span></code></a><a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal"><span class="pre">True</span></code></a></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-544"><span class="versionmodified">在版本3.3中已更改:</span>naive的和aware的<a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>实例之间的相等性比较不引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span></p></div></li><li><p class="first"><span class="yiyi-st" id="yiyi-545">哈希,用作字典的键</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-546">高效的pickling</span></p></li></ul><p><span class="yiyi-st" id="yiyi-547">在布尔上下文中,<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象始终被视为真。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-548"><span class="versionmodified">在3.5版本中已更改:</span>在Python 3.5之前,如果某个<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象表示UTC的午夜则将其视为假。</span><span class="yiyi-st" id="yiyi-549">这个行为被认为是晦涩的且容易出错的已在Python 3.5中删除。</span><span class="yiyi-st" id="yiyi-550">有关详细信息,请参见<a class="reference external" href="https://bugs.python.org/issue13936">issue 13936</a></span></p></div><p><span class="yiyi-st" id="yiyi-551">实例方法:</span></p><dl class="method"><dt id="datetime.time.replace"><span class="yiyi-st" id="yiyi-552"> <code class="descclassname">time.</code><code class="descname">replace</code><span class="sig-paren">(</span><span class="optional">[</span><em>hour</em><span class="optional">[</span>, <em>minute</em><span class="optional">[</span>, <em>second</em><span class="optional">[</span>, <em>microsecond</em><span class="optional">[</span>, <em>tzinfo</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-553">返回具有相同值的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>,但通过任何关键字参数指定新值的那些属性除外。</span><span class="yiyi-st" id="yiyi-554">请注意,可以指定<code class="docutils literal"><span class="pre">tzinfo=None</span></code>来从aware的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>创建一个naive的<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>而不需对time数据进行转换。</span></p></dd></dl><dl class="method"><dt id="datetime.time.isoformat"><span class="yiyi-st" id="yiyi-555"> <code class="descclassname">time.</code><code class="descname">isoformat</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-556">返回以ISO 8601 格式HH:MM:SS.mmmmmm表示间的字符串如果self.microsecond为0则以HH:MM:SS的格式。如果<a class="reference internal" href="#datetime.time.utcoffset" title="datetime.time.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>不返回<code class="docutils literal"><span class="pre">None</span></code>则会附加一个6个字符的字符串带符号的小时和分钟为单位提供UTC偏移量HH:MM:SS.mmmmmm+HH:MM如果self.microsecond为0则为HH:MM:SS+HH:MM。</span></p></dd></dl><dl class="method"><dt id="datetime.time.__str__"><span class="yiyi-st" id="yiyi-557"> <code class="descclassname">time.</code><code class="descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-558">对于时间<em>t</em><code class="docutils literal"><span class="pre">str(t)</span></code>等同于<code class="docutils literal"><span class="pre">t.isoformat()</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.time.strftime"><span class="yiyi-st" id="yiyi-559"> <code class="descclassname">time.</code><code class="descname">strftime</code><span class="sig-paren">(</span><em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-560">返回一个表示time的字符串由显式的格式字符串控制。</span><span class="yiyi-st" id="yiyi-561">有关格式化指令的完整列表,请参见<a class="reference internal" href="#strftime-strptime-behavior"><span>strftime()和strptime()的行为</span></a></span></p></dd></dl><dl class="method"><dt id="datetime.time.__format__"><span class="yiyi-st" id="yiyi-562"> <code class="descclassname">time.</code><code class="descname">__format__</code><span class="sig-paren">(</span><em>format</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-563"><a class="reference internal" href="#datetime.time.strftime" title="datetime.time.strftime"><code class="xref py py-meth docutils literal"><span class="pre">time.strftime()</span></code></a>相同。</span><span class="yiyi-st" id="yiyi-564">这使得可以在使用<a class="reference internal" href="stdtypes.html#str.format" title="str.format"><code class="xref py py-meth docutils literal"><span class="pre">str.format()</span></code></a>时为<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象指定格式字符串。</span><span class="yiyi-st" id="yiyi-565">有关格式化指令的完整列表,请参见<a class="reference internal" href="#strftime-strptime-behavior"><span>strftime()和strptime()的行为</span></a></span></p></dd></dl><dl class="method"><dt id="datetime.time.utcoffset"><span class="yiyi-st" id="yiyi-566"> <code class="descclassname">time.</code><code class="descname">utcoffset</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-567">如果<a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code>,则返回<code class="docutils literal"><span class="pre">None</span></code>,否则返回<code class="docutils literal"><span class="pre">self.tzinfo.utcoffset(None)</span></code>;如果后者未返回<code class="docutils literal"><span class="pre">None</span></code>或表示小于一天的整数分钟的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,则引发一个异常。</span></p></dd></dl><dl class="method"><dt id="datetime.time.dst"><span class="yiyi-st" id="yiyi-568"> <code class="descclassname">time.</code><code class="descname">dst</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-569">如果<a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code>,则返回<code class="docutils literal"><span class="pre">None</span></code>,否则返回<code class="docutils literal"><span class="pre">self.tzinfo.utcoffset(None)</span></code>;如果后者未返回<code class="docutils literal"><span class="pre">None</span></code>或表示小于一天的整数分钟的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,则引发一个异常。</span></p></dd></dl><dl class="method"><dt id="datetime.time.tzname"><span class="yiyi-st" id="yiyi-570"> <code class="descclassname">time.</code><code class="descname">tzname</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-571">如果<a class="reference internal" href="#datetime.time.tzinfo" title="datetime.time.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a><code class="docutils literal"><span class="pre">None</span></code>,则返回<code class="docutils literal"><span class="pre">None</span></code>,否则返回<code class="docutils literal"><span class="pre">self.tzinfo.tzname(None)</span></code>;如果后者不返回<code class="docutils literal"><span class="pre">None</span></code>或字符串对象,则引发一个异常。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-572">例:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">time</span><span class="p">,</span> <span class="n">tzinfo</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">GMT1</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">dt</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="s2">"Europe/Prague"</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">time</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">GMT1</span><span class="p">())</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span>
<span class="go">datetime.time(12, 10, 30, tzinfo=&lt;GMT1 object at 0x...&gt;)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">gmt</span> <span class="o">=</span> <span class="n">GMT1</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
<span class="go">'12:10:30+01:00'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">dst</span><span class="p">()</span>
<span class="go">datetime.timedelta(0)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">tzname</span><span class="p">()</span>
<span class="go">'Europe/Prague'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%H:%M:%S %Z"</span><span class="p">)</span>
<span class="go">'12:10:30 Europe/Prague'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">'The </span><span class="si">{}</span><span class="s1"> is {:%H:%M}.'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"time"</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
<span class="go">'The time is 12:10.'</span>
</code></pre></div><div class="section" id="tzinfo-objects"><h2><span class="yiyi-st" id="yiyi-573">8.1.6. <a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>对象</span></h2><dl class="class"><dt id="datetime.tzinfo"><span class="yiyi-st" id="yiyi-574"><em class="property">class</em> <code class="descclassname">datetime.</code><code class="descname">tzinfo</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-575">这是一个抽象的基类,意味着这个类不应该直接实例化。</span><span class="yiyi-st" id="yiyi-576">你需要派生一个具体的子类,并且(至少)提供你使用的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>方法所需的标准<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>方法的实现。</span><span class="yiyi-st" id="yiyi-577"><a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>模块提供<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>的一个简单的具体子类<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>它可以表示与UTC有固定偏移的时区如UTC本身或北美EST和EDT。</span></p><p><span class="yiyi-st" id="yiyi-578">可以将<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>(的具体子类)的实例传递给<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象的构造函数。</span><span class="yiyi-st" id="yiyi-579">后面的对象将它们的属性视为在本地时间,并且<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>对象支持显示本地时间与UTC的偏移量、时区的名称和DST偏移量所有这些都相对于传递给它们的日期或时间对象。</span></p><p><span class="yiyi-st" id="yiyi-580">用于pickling的特殊要求<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类必须有一个可以无参数调用的<a class="reference internal" href="../reference/datamodel.html#object.__init__" title="object.__init__"><code class="xref py py-meth docutils literal"><span class="pre">__init__()</span></code></a>方法否则它可以被pickled但可能不能再次unpickled。</span><span class="yiyi-st" id="yiyi-581">这是一个在将来可能放松的技术要求。</span></p><p><span class="yiyi-st" id="yiyi-582"><a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>的具体子类可能需要实现以下方法。</span><span class="yiyi-st" id="yiyi-583">需要哪些方法取决于对aware的<a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>对象的使用。</span><span class="yiyi-st" id="yiyi-584">如果有疑问,请实施所有这些。</span></p></dd></dl><dl class="method"><dt id="datetime.tzinfo.utcoffset"><span class="yiyi-st" id="yiyi-585"> <code class="descclassname">tzinfo.</code><code class="descname">utcoffset</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-586">返回本地时间与UTC的偏移量以UTC东部分钟数为单位。</span><span class="yiyi-st" id="yiyi-587">如果本地时间在UTC的西边它应该是负的。</span><span class="yiyi-st" id="yiyi-588">注意这是UTC的总偏移量例如如果<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>对象同时表示时区和DST调整<a class="reference internal" href="#datetime.tzinfo.utcoffset" title="datetime.tzinfo.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>应返回它们的和。</span><span class="yiyi-st" id="yiyi-589">如果UTC偏移未知则返回<code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-590">否则返回的值必须是<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象,指定-1439到1439范围内的整数分钟1440 = 24*60偏移量必须小于一天</span><span class="yiyi-st" id="yiyi-591">大多数<a class="reference internal" href="#datetime.tzinfo.utcoffset" title="datetime.tzinfo.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>的实现可能看起来像这两个:</span></p><pre><code class="language-python"><span></span><span class="k">return</span> <span class="n">CONSTANT</span> <span class="c1"># fixed-offset class</span>
<span class="k">return</span> <span class="n">CONSTANT</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dst</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="c1"># daylight-aware class</span>
</code></pre><p><span class="yiyi-st" id="yiyi-592">如果<a class="reference internal" href="#datetime.tzinfo.utcoffset" title="datetime.tzinfo.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>不返回<code class="docutils literal"><span class="pre">None</span></code>,则<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>也不应返回<code class="docutils literal"><span class="pre">None</span></code></span></p><p><span class="yiyi-st" id="yiyi-593">默认实现的<a class="reference internal" href="#datetime.tzinfo.utcoffset" title="datetime.tzinfo.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>引发<a class="reference internal" href="exceptions.html#NotImplementedError" title="NotImplementedError"><code class="xref py py-exc docutils literal"><span class="pre">NotImplementedError</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.tzinfo.dst"><span class="yiyi-st" id="yiyi-594"> <code class="descclassname">tzinfo.</code><code class="descname">dst</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-595">如果DST信息未知则返回夏令时DST调整以UTC以东为单位或者<code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-596">如果DST不起作用则返回<code class="docutils literal"><span class="pre">timedelta(0)</span></code></span><span class="yiyi-st" id="yiyi-597">如果DST有效则将偏移返回为<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象(有关详细信息,请参阅<a class="reference internal" href="#datetime.tzinfo.utcoffset" title="datetime.tzinfo.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>)。</span><span class="yiyi-st" id="yiyi-598">请注意DST偏移如果适用已添加到<a class="reference internal" href="#datetime.tzinfo.utcoffset" title="datetime.tzinfo.utcoffset"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code></a>返回的UTC偏移因此除非你感兴趣否则不需要单独查阅<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>获得DST信息。</span><span class="yiyi-st" id="yiyi-599">例如,<a class="reference internal" href="#datetime.datetime.timetuple" title="datetime.datetime.timetuple"><code class="xref py py-meth docutils literal"><span class="pre">datetime.timetuple()</span></code></a>调用其<a class="reference internal" href="#datetime.datetime.tzinfo" title="datetime.datetime.tzinfo"><code class="xref py py-attr docutils literal"><span class="pre">tzinfo</span></code></a>属性的<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>方法来确定<code class="xref py py-attr docutils literal"><span class="pre">tm_isdst</span></code>应如何设置,并且<a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">tzinfo.fromutc()</span></code></a>调用<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>来计算跨越时区的DST更改。</span></p><p><span class="yiyi-st" id="yiyi-600">对标准时和夏令时同时进行建模的<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的实例<em>tz</em>必须在此意义上保持一致:</span></p><p><span class="yiyi-st" id="yiyi-601"><code class="docutils literal"><span class="pre">tz.utcoffset(dt)</span> <span class="pre">-</span> <span class="pre">tz.dst(dt)</span></code></span></p><p><span class="yiyi-st" id="yiyi-602">必须对每个<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a> <em>dt</em>返回相同的结果<code class="docutils literal"><span class="pre">dt.tzinfo</span> <span class="pre">==</span> <span class="pre">tz</span></code>。对于正确的<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类,此表达式生成时区的“标准偏移量”,不应取决于日期或时间,而只取决于地理位置。</span><span class="yiyi-st" id="yiyi-603"><a class="reference internal" href="#datetime.datetime.astimezone" title="datetime.datetime.astimezone"><code class="xref py py-meth docutils literal"><span class="pre">datetime.astimezone()</span></code></a>的实现依赖于此,但不能检测不符合规则的;它是程序员的责任来确保它。</span><span class="yiyi-st" id="yiyi-604">如果<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类不能保证这一点,它可以覆盖<a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">tzinfo.fromutc()</span></code></a>的默认实现以与<code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code>正确工作。</span></p><p><span class="yiyi-st" id="yiyi-605">大多数<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>的实现可能看起来像这两个:</span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="c1"># a fixed-offset class: doesn't account for DST</span>
<span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-606">或者</span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="c1"># Code to set dston and dstoff to the time zone's DST</span>
<span class="c1"># transition times based on the input dt.year, and expressed</span>
<span class="c1"># in standard local time. Then</span>
<span class="k">if</span> <span class="n">dston</span> <span class="o">&lt;=</span> <span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">dstoff</span><span class="p">:</span>
<span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-607">默认实现的<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">dst()</span></code></a>引发<a class="reference internal" href="exceptions.html#NotImplementedError" title="NotImplementedError"><code class="xref py py-exc docutils literal"><span class="pre">NotImplementedError</span></code></a></span></p></dd></dl><dl class="method"><dt id="datetime.tzinfo.tzname"><span class="yiyi-st" id="yiyi-608"> <code class="descclassname">tzinfo.</code><code class="descname">tzname</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-609">将与<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象<em>dt</em>对应的时区名称作为字符串返回。</span><span class="yiyi-st" id="yiyi-610"><a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>模块没有定义有关字符串名称的内容,并且没有要求它有任何特别的意思。</span><span class="yiyi-st" id="yiyi-611">例如“GMT”、“UTC”、“-500”、“-5:00”、“EDT”、“US/Eastern”、“America/New York”都是有效的返回。</span><span class="yiyi-st" id="yiyi-612">如果字符串名称未知,则返回<code class="docutils literal"><span class="pre">None</span></code></span><span class="yiyi-st" id="yiyi-613">注意,这是一种方法而不是固定字符串,主要是因为一些<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类希望根据传递的<em>dt</em>的具体值返回不同的名称,特别是如果<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>类正在考虑夏令时。</span></p><p><span class="yiyi-st" id="yiyi-614">默认实现的<a class="reference internal" href="#datetime.tzinfo.tzname" title="datetime.tzinfo.tzname"><code class="xref py py-meth docutils literal"><span class="pre">tzname()</span></code></a>引发<a class="reference internal" href="exceptions.html#NotImplementedError" title="NotImplementedError"><code class="xref py py-exc docutils literal"><span class="pre">NotImplementedError</span></code></a></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-615">这些方法由<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象调用,以对应其相同名称的方法。</span><span class="yiyi-st" id="yiyi-616"><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象传递自身作为参数,<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象传递<code class="docutils literal"><span class="pre">None</span></code>作为参数。</span><span class="yiyi-st" id="yiyi-617">因此,<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类的方法应该准备接受一个为<code class="docutils literal"><span class="pre">None</span></code>或类<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><em>dt</em>参数。</span></p><p><span class="yiyi-st" id="yiyi-618">当传递的是<code class="docutils literal"><span class="pre">None</span></code>时,由类设计器决定最佳响应。</span><span class="yiyi-st" id="yiyi-619">例如如果类想要说time对象不参与<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>协议,则返回<code class="docutils literal"><span class="pre">None</span></code>是适当的。</span><span class="yiyi-st" id="yiyi-620">对于<code class="docutils literal"><span class="pre">utcoffset(None)</span></code>返回标准UTC偏移可能更有用因为没有发现标准偏移的其他约定。</span></p><p><span class="yiyi-st" id="yiyi-621"><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象传递给<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>方法时,<code class="docutils literal"><span class="pre">dt.tzinfo</span></code><em>self</em>是同一个对象 。</span><span class="yiyi-st" id="yiyi-622"><a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>方法可以依赖于此,除非用户代码直接调用<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>方法。</span><span class="yiyi-st" id="yiyi-623">目的是<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>方法将<em>dt</em>解释为在本地时间,并且不需要担心其他时区中的对象。</span></p><p><span class="yiyi-st" id="yiyi-624">还有一个子类可能希望覆盖的另一个<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>方法:</span></p><dl class="method"><dt id="datetime.tzinfo.fromutc"><span class="yiyi-st" id="yiyi-625"> <code class="descclassname">tzinfo.</code><code class="descname">fromutc</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-626">这是从默认的<a class="reference internal" href="#datetime.datetime.astimezone" title="datetime.datetime.astimezone"><code class="xref py py-class docutils literal"><span class="pre">datetime.astimezone()</span></code></a>实现中调用的。</span><span class="yiyi-st" id="yiyi-627">当从中调用时,<code class="docutils literal"><span class="pre">dt.tzinfo</span></code><em>self</em>,并且<em>dt</em>的日期和时间数据被视为表示UTC时间。</span><span class="yiyi-st" id="yiyi-628"><a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">fromutc()</span></code></a>的目的是调整日期和时间数据,在<em>self</em>的本地时间返回等效的日期时间。</span></p><p><span class="yiyi-st" id="yiyi-629">大多数<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类应该能够继承默认的<a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">fromutc()</span></code></a>实现,而不会有问题。</span><span class="yiyi-st" id="yiyi-630">它足够强大以处理固定偏移的时区和既考虑标准时又考虑夏令时的时区后者即使DST转换时间在不同年份有所不同。</span><span class="yiyi-st" id="yiyi-631">在所有情况下,默认<a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">fromutc()</span></code></a>实现可能无法正确处理的时区示例是标准偏移量来自UTC取决于特定的日期和时间的时区这可能发生于政治原因。</span><span class="yiyi-st" id="yiyi-632">如果结果是跨越标准偏移变化的时间之一,则<code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code><a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">fromutc()</span></code></a>的默认实现可能无法产生所需的结果。</span></p><p><span class="yiyi-st" id="yiyi-633">跳过错误情况的代码,默认的<a class="reference internal" href="#datetime.tzinfo.fromutc" title="datetime.tzinfo.fromutc"><code class="xref py py-meth docutils literal"><span class="pre">fromutc()</span></code></a>实现如下:</span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">fromutc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="c1"># raise ValueError error if dt.tzinfo is not self</span>
<span class="n">dtoff</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">utcoffset</span><span class="p">()</span>
<span class="n">dtdst</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">dst</span><span class="p">()</span>
<span class="c1"># raise ValueError if dtoff is None or dtdst is None</span>
<span class="n">delta</span> <span class="o">=</span> <span class="n">dtoff</span> <span class="o">-</span> <span class="n">dtdst</span> <span class="c1"># this is self's standard offset</span>
<span class="k">if</span> <span class="n">delta</span><span class="p">:</span>
<span class="n">dt</span> <span class="o">+=</span> <span class="n">delta</span> <span class="c1"># convert to standard local time</span>
<span class="n">dtdst</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">dst</span><span class="p">()</span>
<span class="c1"># raise ValueError if dtdst is None</span>
<span class="k">if</span> <span class="n">dtdst</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dt</span> <span class="o">+</span> <span class="n">dtdst</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dt</span>
</code></pre></dd></dl><p><span class="yiyi-st" id="yiyi-634"><a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>类的示例:</span></p><pre><code class="language-python"><span></span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">tzinfo</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">datetime</span>
<span class="n">ZERO</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">HOUR</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># A UTC class.</span>
<span class="k">class</span> <span class="nc">UTC</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="sd">"""UTC"""</span>
<span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">"UTC"</span>
<span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="n">utc</span> <span class="o">=</span> <span class="n">UTC</span><span class="p">()</span>
<span class="c1"># A class building tzinfo objects for fixed-offset time zones.</span>
<span class="c1"># Note that FixedOffset(0, "UTC") is a different way to build a</span>
<span class="c1"># UTC tzinfo object.</span>
<span class="k">class</span> <span class="nc">FixedOffset</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="sd">"""Fixed offset in minutes east from UTC."""</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__offset</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__offset</span>
<span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__name</span>
<span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="c1"># A class capturing the platform's idea of local time.</span>
<span class="kn">import</span> <span class="nn">time</span> <span class="k">as</span> <span class="nn">_time</span>
<span class="n">STDOFFSET</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span> <span class="o">=</span> <span class="o">-</span><span class="n">_time</span><span class="o">.</span><span class="n">timezone</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_time</span><span class="o">.</span><span class="n">daylight</span><span class="p">:</span>
<span class="n">DSTOFFSET</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span> <span class="o">=</span> <span class="o">-</span><span class="n">_time</span><span class="o">.</span><span class="n">altzone</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">DSTOFFSET</span> <span class="o">=</span> <span class="n">STDOFFSET</span>
<span class="n">DSTDIFF</span> <span class="o">=</span> <span class="n">DSTOFFSET</span> <span class="o">-</span> <span class="n">STDOFFSET</span>
<span class="k">class</span> <span class="nc">LocalTimezone</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_isdst</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DSTOFFSET</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">STDOFFSET</span>
<span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_isdst</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DSTDIFF</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">_time</span><span class="o">.</span><span class="n">tzname</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_isdst</span><span class="p">(</span><span class="n">dt</span><span class="p">)]</span>
<span class="k">def</span> <span class="nf">_isdst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="n">tt</span> <span class="o">=</span> <span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="n">dt</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">dt</span><span class="o">.</span><span class="n">day</span><span class="p">,</span>
<span class="n">dt</span><span class="o">.</span><span class="n">hour</span><span class="p">,</span> <span class="n">dt</span><span class="o">.</span><span class="n">minute</span><span class="p">,</span> <span class="n">dt</span><span class="o">.</span><span class="n">second</span><span class="p">,</span>
<span class="n">dt</span><span class="o">.</span><span class="n">weekday</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">stamp</span> <span class="o">=</span> <span class="n">_time</span><span class="o">.</span><span class="n">mktime</span><span class="p">(</span><span class="n">tt</span><span class="p">)</span>
<span class="n">tt</span> <span class="o">=</span> <span class="n">_time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">stamp</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tt</span><span class="o">.</span><span class="n">tm_isdst</span> <span class="o">&gt;</span> <span class="mi">0</span>
<span class="n">Local</span> <span class="o">=</span> <span class="n">LocalTimezone</span><span class="p">()</span>
<span class="c1"># A complete implementation of current DST rules for major US time zones.</span>
<span class="k">def</span> <span class="nf">first_sunday_on_or_after</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">days_to_go</span> <span class="o">=</span> <span class="mi">6</span> <span class="o">-</span> <span class="n">dt</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span>
<span class="k">if</span> <span class="n">days_to_go</span><span class="p">:</span>
<span class="n">dt</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days_to_go</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dt</span>
<span class="c1"># US DST Rules</span>
<span class="c1">#</span>
<span class="c1"># This is a simplified (i.e., wrong for a few cases) set of rules for US</span>
<span class="c1"># DST start and end times. For a complete and up-to-date set of DST rules</span>
<span class="c1"># and timezone definitions, visit the Olson Database (or try pytz):</span>
<span class="c1"># http://www.twinsun.com/tz/tz-link.htm</span>
<span class="c1"># http://sourceforge.net/projects/pytz/ (might not be up-to-date)</span>
<span class="c1">#</span>
<span class="c1"># In the US, since 2007, DST starts at 2am (standard time) on the second</span>
<span class="c1"># Sunday in March, which is the first Sunday on or after Mar 8.</span>
<span class="n">DSTSTART_2007</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="c1"># and ends at 2am (DST time; 1am standard time) on the first Sunday of Nov.</span>
<span class="n">DSTEND_2007</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># From 1987 to 2006, DST used to start at 2am (standard time) on the first</span>
<span class="c1"># Sunday in April and to end at 2am (DST time; 1am standard time) on the last</span>
<span class="c1"># Sunday of October, which is the first Sunday on or after Oct 25.</span>
<span class="n">DSTSTART_1987_2006</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">DSTEND_1987_2006</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># From 1967 to 1986, DST used to start at 2am (standard time) on the last</span>
<span class="c1"># Sunday in April (the one on or after April 24) and to end at 2am (DST time;</span>
<span class="c1"># 1am standard time) on the last Sunday of October, which is the first Sunday</span>
<span class="c1"># on or after Oct 25.</span>
<span class="n">DSTSTART_1967_1986</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">24</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">DSTEND_1967_1986</span> <span class="o">=</span> <span class="n">DSTEND_1987_2006</span>
<span class="k">class</span> <span class="nc">USTimeZone</span><span class="p">(</span><span class="n">tzinfo</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hours</span><span class="p">,</span> <span class="n">reprname</span><span class="p">,</span> <span class="n">stdname</span><span class="p">,</span> <span class="n">dstname</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stdoffset</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">hours</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reprname</span> <span class="o">=</span> <span class="n">reprname</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stdname</span> <span class="o">=</span> <span class="n">stdname</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dstname</span> <span class="o">=</span> <span class="n">dstname</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">reprname</span>
<span class="k">def</span> <span class="nf">tzname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dst</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dstname</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdname</span>
<span class="k">def</span> <span class="nf">utcoffset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdoffset</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dst</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">dst</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dt</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">dt</span><span class="o">.</span><span class="n">tzinfo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># An exception may be sensible here, in one or both cases.</span>
<span class="c1"># It depends on how you want to treat them. The default</span>
<span class="c1"># fromutc() implementation (called by the default astimezone()</span>
<span class="c1"># implementation) passes a datetime with dt.tzinfo is self.</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="k">assert</span> <span class="n">dt</span><span class="o">.</span><span class="n">tzinfo</span> <span class="ow">is</span> <span class="bp">self</span>
<span class="c1"># Find start and end times for US DST. For years before 1967, return</span>
<span class="c1"># ZERO for no DST.</span>
<span class="k">if</span> <span class="mi">2006</span> <span class="o">&lt;</span> <span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">:</span>
<span class="n">dststart</span><span class="p">,</span> <span class="n">dstend</span> <span class="o">=</span> <span class="n">DSTSTART_2007</span><span class="p">,</span> <span class="n">DSTEND_2007</span>
<span class="k">elif</span> <span class="mi">1986</span> <span class="o">&lt;</span> <span class="n">dt</span><span class="o">.</span><span class="n">year</span> <span class="o">&lt;</span> <span class="mi">2007</span><span class="p">:</span>
<span class="n">dststart</span><span class="p">,</span> <span class="n">dstend</span> <span class="o">=</span> <span class="n">DSTSTART_1987_2006</span><span class="p">,</span> <span class="n">DSTEND_1987_2006</span>
<span class="k">elif</span> <span class="mi">1966</span> <span class="o">&lt;</span> <span class="n">dt</span><span class="o">.</span><span class="n">year</span> <span class="o">&lt;</span> <span class="mi">1987</span><span class="p">:</span>
<span class="n">dststart</span><span class="p">,</span> <span class="n">dstend</span> <span class="o">=</span> <span class="n">DSTSTART_1967_1986</span><span class="p">,</span> <span class="n">DSTEND_1967_1986</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">first_sunday_on_or_after</span><span class="p">(</span><span class="n">dststart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">first_sunday_on_or_after</span><span class="p">(</span><span class="n">dstend</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
<span class="c1"># Can't compare naive to aware objects, so strip the timezone from</span>
<span class="c1"># dt first.</span>
<span class="k">if</span> <span class="n">start</span> <span class="o">&lt;=</span> <span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">end</span><span class="p">:</span>
<span class="k">return</span> <span class="n">HOUR</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">ZERO</span>
<span class="n">Eastern</span> <span class="o">=</span> <span class="n">USTimeZone</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="s2">"Eastern"</span><span class="p">,</span> <span class="s2">"EST"</span><span class="p">,</span> <span class="s2">"EDT"</span><span class="p">)</span>
<span class="n">Central</span> <span class="o">=</span> <span class="n">USTimeZone</span><span class="p">(</span><span class="o">-</span><span class="mi">6</span><span class="p">,</span> <span class="s2">"Central"</span><span class="p">,</span> <span class="s2">"CST"</span><span class="p">,</span> <span class="s2">"CDT"</span><span class="p">)</span>
<span class="n">Mountain</span> <span class="o">=</span> <span class="n">USTimeZone</span><span class="p">(</span><span class="o">-</span><span class="mi">7</span><span class="p">,</span> <span class="s2">"Mountain"</span><span class="p">,</span> <span class="s2">"MST"</span><span class="p">,</span> <span class="s2">"MDT"</span><span class="p">)</span>
<span class="n">Pacific</span> <span class="o">=</span> <span class="n">USTimeZone</span><span class="p">(</span><span class="o">-</span><span class="mi">8</span><span class="p">,</span> <span class="s2">"Pacific"</span><span class="p">,</span> <span class="s2">"PST"</span><span class="p">,</span> <span class="s2">"PDT"</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-635">请注意在DST转换点在标准时和夏令时都考虑的<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类中,每年有两次不可避免的微妙。</span><span class="yiyi-st" id="yiyi-636">具体来说考虑美国东部UTC-0500其中EDT在3月第二个星期日1:59EST之后开始并在11月第一个星期日1:59EDT后结束。</span></p><pre><code class="language-python"><span></span> <span class="n">UTC</span> <span class="mi">3</span><span class="p">:</span><span class="n">MM</span> <span class="mi">4</span><span class="p">:</span><span class="n">MM</span> <span class="mi">5</span><span class="p">:</span><span class="n">MM</span> <span class="mi">6</span><span class="p">:</span><span class="n">MM</span> <span class="mi">7</span><span class="p">:</span><span class="n">MM</span> <span class="mi">8</span><span class="p">:</span><span class="n">MM</span>
<span class="n">EST</span> <span class="mi">22</span><span class="p">:</span><span class="n">MM</span> <span class="mi">23</span><span class="p">:</span><span class="n">MM</span> <span class="mi">0</span><span class="p">:</span><span class="n">MM</span> <span class="mi">1</span><span class="p">:</span><span class="n">MM</span> <span class="mi">2</span><span class="p">:</span><span class="n">MM</span> <span class="mi">3</span><span class="p">:</span><span class="n">MM</span>
<span class="n">EDT</span> <span class="mi">23</span><span class="p">:</span><span class="n">MM</span> <span class="mi">0</span><span class="p">:</span><span class="n">MM</span> <span class="mi">1</span><span class="p">:</span><span class="n">MM</span> <span class="mi">2</span><span class="p">:</span><span class="n">MM</span> <span class="mi">3</span><span class="p">:</span><span class="n">MM</span> <span class="mi">4</span><span class="p">:</span><span class="n">MM</span>
<span class="n">start</span> <span class="mi">22</span><span class="p">:</span><span class="n">MM</span> <span class="mi">23</span><span class="p">:</span><span class="n">MM</span> <span class="mi">0</span><span class="p">:</span><span class="n">MM</span> <span class="mi">1</span><span class="p">:</span><span class="n">MM</span> <span class="mi">3</span><span class="p">:</span><span class="n">MM</span> <span class="mi">4</span><span class="p">:</span><span class="n">MM</span>
<span class="n">end</span> <span class="mi">23</span><span class="p">:</span><span class="n">MM</span> <span class="mi">0</span><span class="p">:</span><span class="n">MM</span> <span class="mi">1</span><span class="p">:</span><span class="n">MM</span> <span class="mi">1</span><span class="p">:</span><span class="n">MM</span> <span class="mi">2</span><span class="p">:</span><span class="n">MM</span> <span class="mi">3</span><span class="p">:</span><span class="n">MM</span>
</code></pre><p><span class="yiyi-st" id="yiyi-637">当DST开始“start行本地挂钟从1:59走到3:00。</span><span class="yiyi-st" id="yiyi-638">格式2:MM的挂钟时间在当天没有任何意义因此在DST开始的时候<code class="docutils literal"><span class="pre">astimezone(Eastern)</span></code>不会产生结果<code class="docutils literal"><span class="pre">hour</span> <span class="pre">==</span> <span class="pre">2</span></code></span><span class="yiyi-st" id="yiyi-639">为了使<code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code>作出此保证,<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">tzinfo.dst()</span></code></a>方法必须考虑在夏令时“缺少的小时”东部时间2:MM</span></p><p><span class="yiyi-st" id="yiyi-640">当DST结束“end”行有一个可能更糟糕的问题有一个小时不能在本地墙上时间明确拼写白天的最后一个小时。</span><span class="yiyi-st" id="yiyi-641">在东部这是在日间时间结束时5:MM UTC形式的间。</span><span class="yiyi-st" id="yiyi-642">本地挂钟再次从1:59白昼时间回到1:00标准时间</span><span class="yiyi-st" id="yiyi-643">表格1MM的当地时间不明确。</span><span class="yiyi-st" id="yiyi-644"><code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code>模拟本地时钟的行为通过将两个相邻的UTC小时映射到相同的当地小时。</span><span class="yiyi-st" id="yiyi-645">在Eastern这个示例中5:MM形式和6:MM形式的UTC时间在转换到Eastern时都映射到1:MM。</span><span class="yiyi-st" id="yiyi-646">为了使<code class="xref py py-meth docutils literal"><span class="pre">astimezone()</span></code>作出此保证,<a class="reference internal" href="#datetime.tzinfo.dst" title="datetime.tzinfo.dst"><code class="xref py py-meth docutils literal"><span class="pre">tzinfo.dst()</span></code></a>方法必须将“重复小时”中的时间考虑为标准时间。</span><span class="yiyi-st" id="yiyi-647">通过在时区的标准本地时间中表示DST切换时间这可以容易地做到如在该示例中。</span></p><p><span class="yiyi-st" id="yiyi-648">不能承受这种歧义的应用程序应避免使用混合<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类;使用<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>或任何其他固定偏移的<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>子类例如只表示EST固定偏移-5小时或只表示EDT固定偏移-4小时的类</span></p><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-649">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-650"><a class="reference external" href="https://pypi.python.org/pypi/pytz/">pytz</a></span></dt><dd><p class="first"><span class="yiyi-st" id="yiyi-651">标准库有<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>类来处理UTC任意固定偏移和<a class="reference internal" href="#datetime.timezone.utc" title="datetime.timezone.utc"><code class="xref py py-attr docutils literal"><span class="pre">timezone.utc</span></code></a>作为UTC时区实例。</span></p><p class="last"><span class="yiyi-st" id="yiyi-652"><em>pytz</em>库将<em>IANA时区数据库</em>也称为Olson数据库带到Python建议使用它。</span></p></dd><dt><span class="yiyi-st" id="yiyi-653"><a class="reference external" href="https://www.iana.org/time-zones">IANA timezone database</a></span></dt><dd><span class="yiyi-st" id="yiyi-654">时区数据库通常称为tz或zoneinfo包含代表世界各地许多代表性位置的本地时间历史的代码和数据。</span><span class="yiyi-st" id="yiyi-655">它定期更新以反映政治机构对时区边界、UTC偏移和夏令时规则所做的更改。</span></dd></dl></div></div><div class="section" id="timezone-objects"><h2><span class="yiyi-st" id="yiyi-656">8.1.7. <a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>对象</span></h2><p><span class="yiyi-st" id="yiyi-657"><a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>类是<a class="reference internal" href="#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal"><span class="pre">tzinfo</span></code></a>的子类其每个实例表示由与UTC的固定偏移量定义的时区。</span><span class="yiyi-st" id="yiyi-658">请注意,此类的对象不能用于在一年中不同日期使用不同偏移量的位置,或者对民用时间进行历史更改的位置来表示时区信息。</span></p><dl class="class"><dt id="datetime.timezone"><span class="yiyi-st" id="yiyi-659"> <em class="property">class </em><code class="descclassname">datetime.</code><code class="descname">timezone</code><span class="sig-paren">(</span><em>offset</em><span class="optional">[</span>, <em>name</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-660"><em>offset</em>参数必须指定为表示本地时间和UTC之间差异的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-661">它必须严格在<code class="docutils literal"><span class="pre">-timedelta(hours=24)</span></code><code class="docutils literal"><span class="pre">timedelta(hours=24)</span></code>之间并表示整分钟数,否则引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-662"><em>name</em>参数是可选的。</span><span class="yiyi-st" id="yiyi-663">如果指定,它必须是用作<code class="docutils literal"><span class="pre">tzname(dt)</span></code>方法返回的值的字符串。</span><span class="yiyi-st" id="yiyi-664">否则,<code class="docutils literal"><span class="pre">tzname(dt)</span></code>返回字符串'UTCsHHMM'其中s是<em>offset</em>的符号HH和MM分别是<code class="docutils literal"><span class="pre">offset.hours</span></code><code class="docutils literal"><span class="pre">offset.minutes</span></code></span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-665"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><dl class="method"><dt id="datetime.timezone.utcoffset"><span class="yiyi-st" id="yiyi-666"> <code class="descclassname">timezone.</code><code class="descname">utcoffset</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-667">返回构建<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>实例时指定的固定值。</span><span class="yiyi-st" id="yiyi-668">忽略<em>dt</em>参数。</span><span class="yiyi-st" id="yiyi-669">返回值是等于本地时间和UTC之差的<a class="reference internal" href="#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal"><span class="pre">timedelta</span></code></a>实例。</span></p></dd></dl><dl class="method"><dt id="datetime.timezone.tzname"><span class="yiyi-st" id="yiyi-670"> <code class="descclassname">timezone.</code><code class="descname">tzname</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-671">返回在构建<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>实例时指定的固定值或字符串'UTCsHH:MM'其中s是<em>offset</em>的符号HH和MM分别是<code class="docutils literal"><span class="pre">offset.hours</span></code><code class="docutils literal"><span class="pre">offset.minutes</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.timezone.dst"><span class="yiyi-st" id="yiyi-672"> <code class="descclassname">timezone.</code><code class="descname">dst</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-673">始终返回<code class="docutils literal"><span class="pre">None</span></code></span></p></dd></dl><dl class="method"><dt id="datetime.timezone.fromutc"><span class="yiyi-st" id="yiyi-674"> <code class="descclassname">timezone.</code><code class="descname">fromutc</code><span class="sig-paren">(</span><em>dt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-675">返回<code class="docutils literal"><span class="pre">dt</span> <span class="pre">+</span> <span class="pre">offset</span></code></span><span class="yiyi-st" id="yiyi-676"><em>dt</em>参数必须是一个aware的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>实例,其中<code class="docutils literal"><span class="pre">tzinfo</span></code>设置为<code class="docutils literal"><span class="pre">self</span></code></span></p></dd></dl><p><span class="yiyi-st" id="yiyi-677">类属性:</span></p><dl class="attribute"><dt id="datetime.timezone.utc"><span class="yiyi-st" id="yiyi-678"> <code class="descclassname">timezone.</code><code class="descname">utc</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-679">UTC时区<code class="docutils literal"><span class="pre">timezone(timedelta(0))</span></code></span></p></dd></dl></div><div class="section" id="strftime-and-strptime-behavior"><h2><span class="yiyi-st" id="yiyi-680">8.1.8. <code class="xref py py-meth docutils literal"><span class="pre">strftime()</span></code><code class="xref py py-meth docutils literal"><span class="pre">strptime()</span></code>的行为</span></h2><p><span class="yiyi-st" id="yiyi-681"><a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a><a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a><a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象都支持<code class="docutils literal"><span class="pre">strftime(format)</span></code>方法,在显式格式字符串的控制下创建一个表示时间的字符串。</span><span class="yiyi-st" id="yiyi-682">广义上,<code class="docutils literal"><span class="pre">d.strftime(fmt)</span></code>的行为类似于<a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal"><span class="pre">time</span></code></a>模块的<code class="docutils literal"><span class="pre">time.strftime(fmt,</span> <span class="pre">d.timetuple())</span></code>,但并非所有对象都支持<code class="xref py py-meth docutils literal"><span class="pre">timetuple()</span></code>方法。</span></p><p><span class="yiyi-st" id="yiyi-683">相反,<a class="reference internal" href="#datetime.datetime.strptime" title="datetime.datetime.strptime"><code class="xref py py-meth docutils literal"><span class="pre">datetime.strptime()</span></code></a>类方法从表示日期和时间的字符串和相应的格式字符串创建一个<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-684"><code class="docutils literal"><span class="pre">datetime.strptime(date_string,</span> <span class="pre">format)</span></code>等同于<code class="docutils literal"><span class="pre">datetime(*(time.strptime(date_string,</span> <span class="pre">format)[0:6]))</span></code></span></p><p><span class="yiyi-st" id="yiyi-685">对于<a class="reference internal" href="#datetime.time" title="datetime.time"><code class="xref py py-class docutils literal"><span class="pre">time</span></code></a>对象,不应使用年、月和日的格式代码,因为时间对象没有此类值。</span><span class="yiyi-st" id="yiyi-686">如果仍然使用它们,则用<code class="docutils literal"><span class="pre">1900</span></code>代替年份,<code class="docutils literal"><span class="pre">1</span></code>代替月份和日期。</span></p><p><span class="yiyi-st" id="yiyi-687">对于<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象,不应使用小时、分钟、秒和微秒的格式代码,因为<a class="reference internal" href="#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">date</span></code></a>对象没有此类值。</span><span class="yiyi-st" id="yiyi-688">如果仍然使用它们,则用<code class="docutils literal"><span class="pre">0</span></code>代替它们。</span></p><p><span class="yiyi-st" id="yiyi-689">支持的全套格式代码因平台而异因为Python调用平台C库的<code class="xref py py-func docutils literal"><span class="pre">strftime()</span></code>函数,平台的变化是常见的。</span><span class="yiyi-st" id="yiyi-690">要查看平台上支持的全套格式代码,请参阅<em class="manpage">strftime3</em>文档。</span></p><p><span class="yiyi-st" id="yiyi-691">以下是C标准1989版本要求的所有格式代码的列表并且这些代码可以在所有平台上使用标准的C实现。</span><span class="yiyi-st" id="yiyi-692">请注意1999版本的C标准添加了额外的格式代码。</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-693">指示</span></th><th class="head"><span class="yiyi-st" id="yiyi-694">含义</span></th><th class="head"><span class="yiyi-st" id="yiyi-695"></span></th><th class="head"><span class="yiyi-st" id="yiyi-696">笔记</span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-697"><code class="docutils literal"><span class="pre">%a</span></code></span></td><td><span class="yiyi-st" id="yiyi-698">星期几作为区域设置的缩写名称。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-699">Sun, Mon, ..., Sat (en_US);</span></div><div class="line"><span class="yiyi-st" id="yiyi-700">So, Mo, ..., Sa (de_DE)</span></div></div></td><td><span class="yiyi-st" id="yiyi-701">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-702"><code class="docutils literal"><span class="pre">%a</span></code></span></td><td><span class="yiyi-st" id="yiyi-703">星期几作为区域的全名。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-704">Sunday, Monday, ..., Saturday (en_US);</span></div><div class="line"><span class="yiyi-st" id="yiyi-705">Sonntag, Montag, ..., Samstag (de_DE)</span></div></div></td><td><span class="yiyi-st" id="yiyi-706">1</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-707"><code class="docutils literal"><span class="pre">%w</span></code></span></td><td><span class="yiyi-st" id="yiyi-708">星期几为十进制数字其中0表示星期日6表示星期六。</span></td><td><span class="yiyi-st" id="yiyi-709">0, 1, ..., 6</span></td><td></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-710"><code class="docutils literal"><span class="pre">%d</span></code></span></td><td><span class="yiyi-st" id="yiyi-711">一个月中的一天作为零填充的十进制数字。</span></td><td><span class="yiyi-st" id="yiyi-712">01, 02, ..., 31</span></td><td></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-713"><code class="docutils literal"><span class="pre">%b</span></code></span></td><td><span class="yiyi-st" id="yiyi-714">月为区域设置的缩写名称。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-715">JanFeb...Decen_US</span></div><div class="line"><span class="yiyi-st" id="yiyi-716">JanFeb...Dezde_DE</span></div></div></td><td><span class="yiyi-st" id="yiyi-717">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-718"><code class="docutils literal"><span class="pre">%b</span></code></span></td><td><span class="yiyi-st" id="yiyi-719">月作为区域的全名。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-720">January, February, ..., December (en_US);</span></div><div class="line"><span class="yiyi-st" id="yiyi-721">JanuarFebruar...Dezemberde_DE</span></div></div></td><td><span class="yiyi-st" id="yiyi-722">1</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-723"><code class="docutils literal"><span class="pre">%m</span></code></span></td><td><span class="yiyi-st" id="yiyi-724">月份作为零填充十进制数字。</span></td><td><span class="yiyi-st" id="yiyi-725">01, 02, ..., 12</span></td><td></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-726"><code class="docutils literal"><span class="pre">%y</span></code></span></td><td><span class="yiyi-st" id="yiyi-727">没有世纪的一年是一个零填充的十进制数。</span></td><td><span class="yiyi-st" id="yiyi-728">00, 01, ..., 99</span></td><td></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-729"><code class="docutils literal"><span class="pre">%y</span></code></span></td><td><span class="yiyi-st" id="yiyi-730">年份以世纪为十进制数。</span></td><td><span class="yiyi-st" id="yiyi-731">0001, 0002, ..., 2013, 2014, ..., 9998, 9999</span></td><td><span class="yiyi-st" id="yiyi-732">2</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-733"><code class="docutils literal"><span class="pre">%H</span></code></span></td><td><span class="yiyi-st" id="yiyi-734">小时24小时制作为零填充十进制数字。</span></td><td><span class="yiyi-st" id="yiyi-735">00, 01, ..., 23</span></td><td></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-736"><code class="docutils literal"><span class="pre">%I</span></code></span></td><td><span class="yiyi-st" id="yiyi-737">小时12小时制作为零填充的十进制数字。</span></td><td><span class="yiyi-st" id="yiyi-738">01, 02, ..., 12</span></td><td></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-739"><code class="docutils literal"><span class="pre">%p</span></code></span></td><td><span class="yiyi-st" id="yiyi-740">Locale相当于AM或PM。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-741">AM, PM (en_US);</span></div><div class="line"><span class="yiyi-st" id="yiyi-742">am, pm (de_DE)</span></div></div></td><td><span class="yiyi-st" id="yiyi-743">13</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-744"><code class="docutils literal"><span class="pre">%m</span></code></span></td><td><span class="yiyi-st" id="yiyi-745">分为零填充十进制数字。</span></td><td><span class="yiyi-st" id="yiyi-746">0001...59</span></td><td></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-747"><code class="docutils literal"><span class="pre">%S</span></code></span></td><td><span class="yiyi-st" id="yiyi-748">其次作为零填充十进制数。</span></td><td><span class="yiyi-st" id="yiyi-749">0001...59</span></td><td><span class="yiyi-st" id="yiyi-750">4</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-751"><code class="docutils literal"><span class="pre">%f</span></code></span></td><td><span class="yiyi-st" id="yiyi-752">微秒为十进制数字,左侧为零填充。</span></td><td><span class="yiyi-st" id="yiyi-753">000000000001...999999</span></td><td><span class="yiyi-st" id="yiyi-754">5</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-755"><code class="docutils literal"><span class="pre">%z</span></code></span></td><td><span class="yiyi-st" id="yiyi-756">+HHMM或-HHMM形式的UTC偏移如果对象是naive的则为空字符串</span></td><td><span class="yiyi-st" id="yiyi-757">(empty), +0000, -0400, +1030</span></td><td><span class="yiyi-st" id="yiyi-758">6</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-759"><code class="docutils literal"><span class="pre">%z</span></code></span></td><td><span class="yiyi-st" id="yiyi-760">时区名称(如果对象天真,则为空字符串)。</span></td><td><span class="yiyi-st" id="yiyi-761">(empty), UTC, EST, CST</span></td><td></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-762"><code class="docutils literal"><span class="pre">%j</span></code></span></td><td><span class="yiyi-st" id="yiyi-763">一年中的一天为零填充的十进制数字。</span></td><td><span class="yiyi-st" id="yiyi-764">001002...366</span></td><td></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-765"><code class="docutils literal"><span class="pre">%U</span></code></span></td><td><span class="yiyi-st" id="yiyi-766">一年中的星期数(星期日为一周的第一天)作为零填充十进制数。</span><span class="yiyi-st" id="yiyi-767">在第一个星期日之前的新的一年的所有天被认为是在第0周。</span></td><td><span class="yiyi-st" id="yiyi-768">0001...53</span></td><td><span class="yiyi-st" id="yiyi-769">7</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-770"><code class="docutils literal"><span class="pre">%w</span></code></span></td><td><span class="yiyi-st" id="yiyi-771">一年中的星期数(星期一作为一周中的第一天)作为十进制数。</span><span class="yiyi-st" id="yiyi-772">在第一个星期一之前的新的一年中的所有天被认为是在第0周。</span></td><td><span class="yiyi-st" id="yiyi-773">0001...53</span></td><td><span class="yiyi-st" id="yiyi-774">7</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-775"><code class="docutils literal"><span class="pre">%c</span></code></span></td><td><span class="yiyi-st" id="yiyi-776">语言环境的适当日期和时间表示。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-777">星期二8月16日21:30:00 1988en_US</span></div><div class="line"><span class="yiyi-st" id="yiyi-778">Di 8月16日21:30:00 1988de_DE</span></div></div></td><td><span class="yiyi-st" id="yiyi-779">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-780"><code class="docutils literal"><span class="pre">%x</span></code></span></td><td><span class="yiyi-st" id="yiyi-781">语言环境的适当日期表示。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-782">08/16/88None</span></div><div class="line"><span class="yiyi-st" id="yiyi-783">08/16/1988en_US</span></div><div class="line"><span class="yiyi-st" id="yiyi-784">16.08.1988de_DE</span></div></div></td><td><span class="yiyi-st" id="yiyi-785">1</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-786"><code class="docutils literal"><span class="pre">%x</span></code></span></td><td><span class="yiyi-st" id="yiyi-787">语言环境的适当时间表示。</span></td><td><div class="first last line-block"><div class="line"><span class="yiyi-st" id="yiyi-788">21:30:00en_US</span></div><div class="line"><span class="yiyi-st" id="yiyi-789">21:30:00de_DE</span></div></div></td><td><span class="yiyi-st" id="yiyi-790">1</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-791"><code class="docutils literal"><span class="pre">%%</span></code></span></td><td><span class="yiyi-st" id="yiyi-792">字面值<code class="docutils literal"><span class="pre">''</span></code>字符。</span></td><td><span class="yiyi-st" id="yiyi-793">%</span></td><td></td></tr></tbody></table><p><span class="yiyi-st" id="yiyi-794">笔记:</span></p><ol class="arabic"><li><p class="first"><span class="yiyi-st" id="yiyi-795">因为格式取决于当前的区域设置,在做出关于输出值的假设时应该小心。</span><span class="yiyi-st" id="yiyi-796">字段顺序将有所不同(例如,“月/日/年”和“日/月/年”输出可能包含使用区域设置的默认编码进行编码的Unicode字符例如如果当前区域设置为<code class="docutils literal"><span class="pre">ja_JP</span></code>,默认编码可以是<code class="docutils literal"><span class="pre">eucJP</span></code><code class="docutils literal"><span class="pre">SJIS</span></code><code class="docutils literal"><span class="pre">utf-8</span></code>中的任何一个;使用<a class="reference internal" href="locale.html#locale.getlocale" title="locale.getlocale"><code class="xref py py-meth docutils literal"><span class="pre">locale.getlocale()</span></code></a>以确定当前区域设置的编码)。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-797"><code class="xref py py-meth docutils literal"><span class="pre">strptime()</span></code>方法可以解析完整稍微[1,9999]范围内的年份,但 &lt; 1000的年份必须使用0填充到4位数。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-798"><span class="versionmodified">在版本3.2中更改:</span>在以前的版本中,<code class="xref py py-meth docutils literal"><span class="pre">strftime()</span></code>方法仅限于&gt;= 1900的年份。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-799"><span class="versionmodified">在版本3.3中更改:</span>在版本3.2中,<code class="xref py py-meth docutils literal"><span class="pre">strftime()</span></code>方法仅限于&gt;= 1000的年份。</span></p></div></li><li><p class="first"><span class="yiyi-st" id="yiyi-800">当与<code class="xref py py-meth docutils literal"><span class="pre">strptime()</span></code>方法一起使用时,只有在使用<code class="docutils literal"><span class="pre">%I</span></code>指令解析小时的时候,<code class="docutils literal"><span class="pre">%p</span></code>指令才会影响输出。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-801"><a class="reference internal" href="time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal"><span class="pre">time</span></code></a>模块不同,<a class="reference internal" href="#module-datetime" title="datetime: Basic date and time types."><code class="xref py py-mod docutils literal"><span class="pre">datetime</span></code></a>模块不支持闰秒。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-802">当与<code class="xref py py-meth docutils literal"><span class="pre">strptime()</span></code>方法一起使用时,<code class="docutils literal"><span class="pre">f</span></code>指令接受一到六个数字,并在右边以零填充。</span><span class="yiyi-st" id="yiyi-803"><code class="docutils literal"><span class="pre">f</span></code>是C标准中的一组格式字符的扩展但是在datetime对象中单独实现因此始终可用</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-804">对于naive对象<code class="docutils literal"><span class="pre">z</span></code><code class="docutils literal"><span class="pre">Z</span></code>格式代码将替换为空字符串。</span></p><p><span class="yiyi-st" id="yiyi-805">对于aware对象</span></p><dl class="docutils"><dt><span class="yiyi-st" id="yiyi-806"><code class="docutils literal"><span class="pre">%z</span></code></span></dt><dd><p class="first last"><span class="yiyi-st" id="yiyi-807"><code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code>被转换为+HHMM或-HHMM形式的5个字符的字符串其中HH是给出UTC偏移小时数的2位字符串MM是给出UTC偏移分钟数的2位字符串。</span><span class="yiyi-st" id="yiyi-808">例如,如果<code class="xref py py-meth docutils literal"><span class="pre">utcoffset()</span></code>返回<code class="docutils literal"><span class="pre">timedelta(hours=-3,</span> <span class="pre">minutes=-30)</span></code>,那么<code class="docutils literal"><span class="pre">%z</span></code> 替换为字符串<code class="docutils literal"><span class="pre">'-0330'</span></code></span></p></dd><dt><span class="yiyi-st" id="yiyi-809"><code class="docutils literal"><span class="pre">%z</span></code></span></dt><dd><p class="first last"><span class="yiyi-st" id="yiyi-810">如果<code class="xref py py-meth docutils literal"><span class="pre">tzname()</span></code>返回<code class="docutils literal"><span class="pre">None</span></code>,则以空字符串替换<code class="docutils literal"><span class="pre">Z</span></code></span><span class="yiyi-st" id="yiyi-811">否则,<code class="docutils literal"><span class="pre">Z</span></code>被替换为返回值,它必须是字符串。</span></p></dd></dl><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-812"><span class="versionmodified">在版本3.2中更改:</span>当向<code class="xref py py-meth docutils literal"><span class="pre">strptime()</span></code>方法提供<code class="docutils literal"><span class="pre">z</span></code>指令时将产生aware的<a class="reference internal" href="#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-813">结果的<code class="docutils literal"><span class="pre">tzinfo</span></code>将设置为一个<a class="reference internal" href="#datetime.timezone" title="datetime.timezone"><code class="xref py py-class docutils literal"><span class="pre">timezone</span></code></a>实例。</span></p></div></li><li><p class="first"><span class="yiyi-st" id="yiyi-814"><code class="xref py py-meth docutils literal"><span class="pre">strptime()</span></code>方法一起使用时,<code class="docutils literal"><span class="pre">U</span></code><code class="docutils literal"><span class="pre">W</span></code>仅在指定星期和年份时使用。</span></p></li></ol><p class="rubric"><span class="yiyi-st" id="yiyi-815">脚注</span></p><table class="docutils footnote" frame="void" id="id2" rules="none"><tbody valign="top"><tr><td class="label"><span class="yiyi-st" id="yiyi-816"><a class="fn-backref" href="#id1">[1]</a></span></td><td><span class="yiyi-st" id="yiyi-817">如果,也就是说,我们忽略相对论的影响</span></td></tr></tbody></table></div></div></div>