全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
879 0
2019-10-16
<!-- markdown css tag --><div class="pinggu_markdown">
<div class="pinggu_markdown__html"><p>原文: <a href="https://shen.bioinit.com/topic/code/2&#48;19-&#48;9-2&#48;-how-to-use-datetime-in-python/">https://shen.bioinit.com/topic/code/2&#48;19-&#48;9-2&#48;-how-to-use-datetime-in-python/</a></p>
<hr>
<p>在本教程中,我们将介绍 python 的 <code>datetime</code> 模块以及如何使用它来处理日期、时间,以及日期时间的格式化处理。 它包含各种实用示例,可帮助您通过 python 函数更加快捷高效进行日期和时间处理。 一般来说,日期类型列不容易操作,因为它带来很多挑战,例如处理闰年,一个月中的不同天数,不同的日期和时间格式,或者日期值是否以字符串(字符)格式存储等等。</p>
<h3 id="datatime-模块">1. datatime 模块</h3>
<p>它是一个 python 模块,它提供了几个处理日期和时间的函数。它有以下四个类,在本文的后半部分将解释这些类是如何工作的。</p>
<ol>
<li>datetime</li>
<li>date</li>
<li>time</li>
<li>timedelta</li>
</ol>
<p>没有使用真实数据集经验的人可能没有遇到 date columns。在他们的印象中可能会觉得使用日期的机会很少而且不那么重要。为了启发他们,我列出了现实世界的例子,其中使用 <code>datetime</code> 模块的好处可能是非常明显的。</p>
<ol>
<li>选择 2&#48;18 年 6 月 3&#48; 日活跃的所有储蓄账户持有人,并检查他们的状态是否仍然有效;</li>
<li>确定在过去 3 个月内提交超过 2&#48; 件索赔的被保险人;</li>
<li>识别在过去 6 个月内进行多笔交易的客户;</li>
<li>从时间戳值中提取日期。</li>
</ol>
<h4 id="导入-datetime-模块">导入 <code>datetime</code> 模块</h4>
<p>您可以使用以下命令导入或加载 <code>datetime</code> 模块:</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token keyword">import</span> datetime
</code></pre>
<p>您不需要安装此模块,因为它与 python 软件的安装捆绑在一起。</p>
<h3 id="dates">2. Dates</h3>
<p>这里我们使用 <code>datetime.date</code> 类来表示日历日期值。 <code>today()</code> 方法用于获取当前日期。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">import</span> datetime
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">.</span>today<span class="token punctuation">(</span><span class="token punctuation">)</span>
datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">)</span>
</code></pre>
<p>为了将其显示为正确的日历日期,我们可以将其包装在 <code>print()</code> 命令中。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>datetime<span class="token punctuation">.</span>date<span class="token punctuation">.</span>today<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;9</span><span class="token operator">-</span><span class="token number">1&#48;</span>
</code></pre>
<h4 id="创建-date-对象">2.1 创建 Date 对象</h4>
<p>日期类遵循如下所示的语法:<code>**date(year, month, day)**</code></p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">2&#48;</span>
</code></pre>
<h4 id="从-date-值中提取-day-month-和-year">2.2 从 date 值中提取 day, month 和 year</h4>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>day
<span class="token number">2&#48;</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>month
<span class="token number">1&#48;</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>year
<span class="token number">2&#48;19</span>
</code></pre>
<h4 id="自定义日期格式">2.3 自定义日期格式</h4>
<p>您可以使用 <code>strftime</code> 方法定义日期格式来自定义日期格式。它将日期对象转换为字符串。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">2&#48;</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%d-%m-%Y"</span><span class="token punctuation">)</span>
<span class="token string">'2&#48;-1&#48;-2&#48;19'</span>
</code></pre>
<p><code>%d</code> 指的是一个月中的某一天。在 <code>2&#48;-1&#48;-2&#48;19</code> 中, <code>%d</code>  返回 2&#48;。<br><code>%m</code> 指的是一年中的某个月。在 <code>2&#48;-1&#48;-2&#48;19</code> 中, <code>%m</code> 返回 1&#48;。<br><code>%Y</code> 指的是年。字母 <strong>‘Y’</strong> 是大写的。在 <code>2&#48;-1&#48;-2&#48;19</code> 中,<code>%Y</code> 返回 2&#48;19 年。<br><code>%y</code> 指的是两位数格式的年份。在 <code>2&#48;-1&#48;-2&#48;19</code> 中,<code>%y</code> 返回 19。</p>
<p><strong>其他流行的格式代码:</strong><br><code>%a</code> 返回工作日的前三个字母,如 <code>Sun</code> ;<br><code>%A</code> 返回工作日的完整名称,如 <code>Sunday</code>;<br><code>%b</code> 返回月份的前三个字母,如 <code>Oct</code> ;<br><code>%B</code> 返回月份的完整名称,如 <code>October</code> ;</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%d/%m/%Y"</span><span class="token punctuation">)</span>
<span class="token string">'2&#48;/1&#48;/2&#48;19'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%b %d, %Y"</span><span class="token punctuation">)</span>
<span class="token string">'Oct 2&#48;, 2&#48;19'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%B %d, %Y"</span><span class="token punctuation">)</span>
<span class="token string">'October 2&#48;, 2&#48;19'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%a %B %d, %Y"</span><span class="token punctuation">)</span>
<span class="token string">'Sun October 2&#48;, 2&#48;19'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%A %B %d, %Y"</span><span class="token punctuation">)</span>
<span class="token string">'Sunday October 2&#48;, 2&#48;19'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%A, %B %d, %Y"</span><span class="token punctuation">)</span>
<span class="token string">'Sunday, October 2&#48;, 2&#48;19'</span>
</code></pre>
<h3 id="time">3. Time</h3>
<p>时间值使用 <code>datetime.time</code> 类定义。它遵循如下所示的语法:<br><code>_datetime.time(hour, minute, second, microseconds)_</code></p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t <span class="token operator">=</span> datetime<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token number">21</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span>
<span class="token number">21</span><span class="token punctuation">:</span><span class="token number">&#48;2</span><span class="token punctuation">:</span><span class="token number">&#48;3</span>
</code></pre>
<h4 id="从时间值获取小时,分钟和秒">3.1 从时间值获取小时,分钟和秒</h4>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t <span class="token operator">=</span> datetime<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token number">21</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t<span class="token punctuation">.</span>hour
<span class="token number">21</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t<span class="token punctuation">.</span>minute
<span class="token number">2</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t<span class="token punctuation">.</span>second
<span class="token number">3</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t<span class="token punctuation">.</span>microsecond
<span class="token number">&#48;</span>
</code></pre>
<h4 id="将时间转换为-am-pm-格式">3.2 将时间转换为 AM PM 格式</h4>
<ul>
<li><code>%I</code> 将 24 小时时间格式转换为 12 小时格式。</li>
<li><code>%p</code> 根据时间值返回 AM PM。</li>
<li><code>%H</code> 返回时间值的小时数。</li>
<li><code>%M</code> 返回时间值的分钟数。</li>
<li><code>%S</code> 返回时间值的秒数。</li>
</ul>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t <span class="token operator">=</span> datetime<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token number">21</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span>
<span class="token number">21</span><span class="token punctuation">:</span><span class="token number">&#48;2</span><span class="token punctuation">:</span><span class="token number">&#48;3</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> t<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%I:%M %p"</span><span class="token punctuation">)</span>
<span class="token string">'&#48;9:&#48;2 PM'</span>
</code></pre>
<h3 id="同时处理-dates-和-time">4. 同时处理 Dates 和 Time</h3>
<p><code>datetime</code>  库有另一个名为 <code>datetime.datetime</code> 的类,用于表示日期加时间。你可以称之为时间戳。 <code>now()</code> 或 <code>today()</code> 方法的 <code>datetime</code> 类用于提取当前日期和时间。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;9</span><span class="token operator">-</span><span class="token number">1&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">45</span><span class="token punctuation">:</span><span class="token number">46.941261</span>
</code></pre>
<p><code>%c</code> 表示当地的日期和时间。<code>%X</code> 表示当地的时间。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;9</span><span class="token operator">-</span><span class="token number">1&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">45</span><span class="token punctuation">:</span><span class="token number">46.941261</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%c"</span><span class="token punctuation">)</span>
<span class="token string">'Tue Sep 1&#48; 1&#48;:45:46 2&#48;19'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%A %B %d %X"</span><span class="token punctuation">)</span>
<span class="token string">'Tuesday September 1&#48; 1&#48;:45:46'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%A %B %d %H:%M"</span><span class="token punctuation">)</span>
<span class="token string">'Tuesday September 1&#48; 1&#48;:45'</span>
</code></pre>
<h4 id="创建-datetime-对象">4.1 创建 datetime 对象</h4>
<p><code>datetime</code> 类的语法如下:<br><code>_datetime(year, month, day, hour, minute, second, microsecond)_</code></p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">51</span><span class="token punctuation">,</span> <span class="token number">&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>
        
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">'%d-%m-%Y %H-%M'</span><span class="token punctuation">)</span>
<span class="token string">'2&#48;-&#48;7-2&#48;19 1&#48;-51'</span>
</code></pre>
<h4 id="在-python-中将字符串转换为-datetime">4.2 在 python 中将字符串转换为 datetime</h4>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">from</span> dateutil<span class="token punctuation">.</span>parser <span class="token keyword">import</span> parse
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>parse<span class="token punctuation">(</span><span class="token string">'March &#48;1, 2&#48;19'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;3</span><span class="token operator">-</span><span class="token number">&#48;1</span> <span class="token number">&#48;&#48;</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>
</code></pre>
<h3 id="如何获取当前的时间?">5. 如何获取当前的时间?</h3>
<p>我们可以使用我们在上一节中使用的相同函数,并使用 <code>time()</code> 方法从返回值中提取时间。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre>
<h3 id="如何获得当前周的天?">6. 如何获得当前周的天?</h3>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;9</span><span class="token operator">-</span><span class="token number">1&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">58</span><span class="token punctuation">:</span><span class="token number">1&#48;.&#48;44233</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%A %B %d %H:%M"</span><span class="token punctuation">)</span>
<span class="token string">'Tuesday September 1&#48; 1&#48;:58'</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt<span class="token punctuation">.</span>isoweekday<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token number">2</span>
</code></pre>
<h3 id="计算未来或过去的日期">7. 计算未来或过去的日期</h3>
<p>通过使用 <code>timedelta</code> ,您可以添加或减去天,周,小时,分钟,秒,微秒和毫秒。当您想要计算未来或过去的日期时,它非常有用。假设您要求识别过去 3&#48; 天内注册产品的所有客户。要解决此问题,您需要计算今天日期之前 3&#48; 天的日期。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;9</span><span class="token operator">-</span><span class="token number">1&#48;</span> <span class="token number">11</span><span class="token punctuation">:</span><span class="token number">&#48;1</span><span class="token punctuation">:</span><span class="token number">54.959386</span>

<span class="token comment">#3&#48; days ahead</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> delta <span class="token operator">=</span> datetime<span class="token punctuation">.</span>timedelta<span class="token punctuation">(</span>days<span class="token operator">=</span><span class="token number">3&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> delta<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">1&#48;</span> <span class="token number">11</span><span class="token punctuation">:</span><span class="token number">&#48;1</span><span class="token punctuation">:</span><span class="token number">54.959386</span>
        
<span class="token comment">#3&#48; days back</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">-</span> delta<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;8</span><span class="token operator">-</span><span class="token number">11</span> <span class="token number">11</span><span class="token punctuation">:</span><span class="token number">&#48;1</span><span class="token punctuation">:</span><span class="token number">54.959386</span>
        
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> delta <span class="token operator">=</span> datetime<span class="token punctuation">.</span>timedelta<span class="token punctuation">(</span>days<span class="token operator">=</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> hours<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">,</span> minutes<span class="token operator">=</span><span class="token number">3&#48;</span><span class="token punctuation">,</span> seconds<span class="token operator">=</span><span class="token number">3&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> delta<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;9</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">14</span><span class="token punctuation">:</span><span class="token number">32</span><span class="token punctuation">:</span><span class="token number">24.959386</span>

<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> delta <span class="token operator">=</span> datetime<span class="token punctuation">.</span>timedelta<span class="token punctuation">(</span>weeks<span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">,</span> hours<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">,</span> minutes<span class="token operator">=</span><span class="token number">3&#48;</span><span class="token punctuation">,</span> seconds<span class="token operator">=</span><span class="token number">3&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> delta<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">&#48;8</span> <span class="token number">14</span><span class="token punctuation">:</span><span class="token number">32</span><span class="token punctuation">:</span><span class="token number">24.959386</span>        
</code></pre>
<p>在 <code>timedelta</code> 中,缺少月份和年份选项,这意味着您无法按月(s)或年(s)计算未来日期增量。要完成此任务,我们可以使用 <code>dateutil</code> 包。让我们通过提交以下代码来导入此包:</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token keyword">from</span> dateutil<span class="token punctuation">.</span>relativedelta <span class="token keyword">import</span> <span class="token operator">*</span>
</code></pre>
<p>如果 <code>dateutil</code> 包未安装在您的系统上,请通过运行此命令 <code>pip install python-dateutil</code> 来安装它。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">from</span> dateutil<span class="token punctuation">.</span>relativedelta <span class="token keyword">import</span> <span class="token operator">*</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">51</span><span class="token punctuation">,</span> <span class="token number">&#48;</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>
        
<span class="token comment">#1 Month ahead        </span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> relativedelta<span class="token punctuation">(</span>months<span class="token operator">=</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;8</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>

<span class="token comment">#1 Month Back</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> relativedelta<span class="token punctuation">(</span>months<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;6</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>
</code></pre>
<p>如果您想知道这个 <code>relativedelta(months = + 1)</code> 与 <code>datetime.timedelta(days = 3&#48;)</code> 有何不同,请观察两个命令的返回值(结果)。</p>
<p>由于 7 月有 31 天,提前 3&#48; 天使用此 <code>datetime.timedelta(days=3&#48;)</code> 返回 2&#48;19-&#48;8-19 1&#48;:51:&#48;&#48;。 <code>relativedelta(months=+1)</code> 返回 2&#48;19-&#48;8-2&#48; 1&#48;:51:&#48;&#48; 这是一个完整的 1 个月。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token comment">#Next month, plus one week</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> relativedelta<span class="token punctuation">(</span>months<span class="token operator">=</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> weeks<span class="token operator">=</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;8</span><span class="token operator">-</span><span class="token number">27</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>

<span class="token comment">#Next Year        </span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt <span class="token operator">+</span> relativedelta<span class="token punctuation">(</span>years<span class="token operator">=</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;2&#48;</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>
</code></pre>
<h4 id="考虑闰年">7.1 考虑闰年</h4>
<p><br>来自 <code>dateutil</code> 包的 <code>relativedelta</code> 方法在计算未来或过去日期时会同时考虑闰年的情况。2&#48;&#48;&#48; 年是闰年,所以 2 月份有 29 天;但明年 2 月只有 28 天。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;&#48;&#48;</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">29</span><span class="token punctuation">)</span><span class="token operator">+</span> relativedelta<span class="token punctuation">(</span>years<span class="token operator">=</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;&#48;1</span><span class="token operator">-</span><span class="token number">&#48;2</span><span class="token operator">-</span><span class="token number">28</span>
</code></pre>
<h3 id="两个日期之间的差异">8. 两个日期之间的差异</h3>
<p>假设您需要计算两个日期之间的天数。当您需要计算特定信息客户的使用期限时,即当他们开立账户(开始日期)和账户关闭时(结束日期)时,这是一个非常常见的数据问题陈述。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> date1 <span class="token operator">=</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;2&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> date2 <span class="token operator">=</span> datetime<span class="token punctuation">.</span>date<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> diff <span class="token operator">=</span> date1<span class="token operator">-</span> date2
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> diff<span class="token punctuation">.</span>days
<span class="token number">3&#48;5</span>
</code></pre>
<h4 id="如何计算两个日期之间的月数">8.1 如何计算两个日期之间的月数</h4>
<p>一种方法是计算天数,然后除以 3&#48; 得到月数。但它并不总是正确的,因为有些月份有 31 天。<br><img src="https://qiniu.bioinit.com/yuque/&#48;/2&#48;19/png/126&#48;32/1568&#48;85&#48;11856-f1944dbf-86b7-46f2-8b&#48;7-e251&#48;1a3e496.png#align=left&amp;display=inline&amp;height=175&amp;name=image.png&amp;originHeight=175&amp;originWidth=857&amp;search=&amp;size=11214&amp;status=done&amp;width=857" alt="image.png"></p>
<p><strong>它是怎么起作用的呢?</strong></p>
<ul>
<li>date1.month - date2.month returns -2</li>
<li>12*(date1.year - date2.year) returns 12</li>
<li>-2 + 12 = 1&#48;</li>
</ul>
<p><strong>注意:</strong> <br>假设您要计算 31/1&#48;/2&#48;18 和 &#48;1/11/2&#48;18 之间的月数,上面建议的方法将返回 1,因为两个日期位于月差异中。您可能会发现它不正确,因为两个日期之间的天数是1。您是否知道 SAS 软件中的 INTCK 功能(默认设置)也会返回1? 返回 1 的用法是什么? 当您需要将时间序列数据排序到箱中时,它非常有用。例如,每日数据可以累积到月度数据,以作为月度系列进行处理。如果您希望 &#48; 作为月数,则可以使用上面“<em>Not full-proof Solution</em>”下面显示的代码。</p>
<h3 id="如何使用-pandas-数据框上的日期?">9. 如何使用 pandas 数据框上的日期?</h3>
<p>在现实世界中,我们通常从外部文件导入数据并将其存储在 pandas Datafr ame 中。因此,了解我们如何在 Datafr ame 上执行日期和时间操作非常重要。让我们创建一个示例数据框用于说明目的。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df <span class="token operator">=</span> pd<span class="token punctuation">.</span>Datafr ame<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">"A"</span><span class="token punctuation">:</span><span class="token punctuation">[</span><span class="token string">"2&#48;19-&#48;1-&#48;1"</span><span class="token punctuation">,</span> <span class="token string">"2&#48;19-&#48;5-&#48;3"</span><span class="token punctuation">,</span> <span class="token string">"2&#48;19-&#48;7-&#48;3"</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
                       <span class="token string">"B"</span><span class="token punctuation">:</span><span class="token punctuation">[</span><span class="token string">"2&#48;19-&#48;3-&#48;2"</span><span class="token punctuation">,</span> <span class="token string">"2&#48;19-&#48;8-&#48;1"</span><span class="token punctuation">,</span> <span class="token string">"2&#48;19-1&#48;-&#48;1"</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token comment"># Let's check the column types.</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">.</span>dtypes
A    <span class="token builtin">ob ject</span>
B    <span class="token builtin">ob ject</span>
dtype<span class="token punctuation">:</span> <span class="token builtin">ob ject</span>
</code></pre>
<p>可以看到,这里的 A 列和 B 列都是字符串(character values)。由于这些变量存储在字符串中,因此需要将列转换为 <code>datetime</code> 对象。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">[</span><span class="token string">'A'</span><span class="token punctuation">]</span> <span class="token operator">=</span> pd<span class="token punctuation">.</span>to_datetime<span class="token punctuation">(</span>df<span class="token punctuation">[</span><span class="token string">'A'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span> <span class="token operator">=</span> pd<span class="token punctuation">.</span>to_datetime<span class="token punctuation">(</span>df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">.</span>dtypes
A    datetime64<span class="token punctuation">[</span>ns<span class="token punctuation">]</span>
B    datetime64<span class="token punctuation">[</span>ns<span class="token punctuation">]</span>
dtype<span class="token punctuation">:</span> <span class="token builtin">ob ject</span>
</code></pre>
<p>为了计算在 pandas datafr ame 上使用 A 列和 B 列的天数,您只需要对这两列进行计算。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">[</span><span class="token string">'C'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span> <span class="token operator">-</span> df<span class="token punctuation">[</span><span class="token string">'A'</span><span class="token punctuation">]</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df
           A          B       C
<span class="token number">&#48;</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;1</span><span class="token operator">-</span><span class="token number">&#48;1</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;3</span><span class="token operator">-</span><span class="token number">&#48;2</span> <span class="token number">6&#48;</span> days
<span class="token number">1</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;5</span><span class="token operator">-</span><span class="token number">&#48;3</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;8</span><span class="token operator">-</span><span class="token number">&#48;1</span> <span class="token number">9&#48;</span> days
<span class="token number">2</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">&#48;3</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">&#48;1</span> <span class="token number">9&#48;</span> days
</code></pre>
<p>我们计算的 C 列采用日期时间格式。为了获得整数格式的差值,您可以提交以下命令。 <code>dt</code> 可以让 pandas 使用 <code>datetime</code> 方法。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">[</span><span class="token string">'C'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span> <span class="token operator">-</span> df<span class="token punctuation">[</span><span class="token string">'A'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span>dt<span class="token punctuation">.</span>days
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df
           A          B   C
<span class="token number">&#48;</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;1</span><span class="token operator">-</span><span class="token number">&#48;1</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;3</span><span class="token operator">-</span><span class="token number">&#48;2</span>  <span class="token number">6&#48;</span>
<span class="token number">1</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;5</span><span class="token operator">-</span><span class="token number">&#48;3</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;8</span><span class="token operator">-</span><span class="token number">&#48;1</span>  <span class="token number">9&#48;</span>
<span class="token number">2</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">&#48;3</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">&#48;1</span>  <span class="token number">9&#48;</span>
</code></pre>
<h4 id="获取过去-3-个月的日期">9.1 获取过去 3 个月的日期</h4>
<p>纯粹的 pythonic 方法是在 lambda 中定义函数,它在所有行上运行。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">from</span> dateutil<span class="token punctuation">.</span>relativedelta <span class="token keyword">import</span> <span class="token operator">*</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df<span class="token punctuation">[</span><span class="token string">'D'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">"B"</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token builtin">apply</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> x <span class="token operator">-</span> relativedelta<span class="token punctuation">(</span>months<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> df
           A          B   C          D
<span class="token number">&#48;</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;1</span><span class="token operator">-</span><span class="token number">&#48;1</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;3</span><span class="token operator">-</span><span class="token number">&#48;2</span>  <span class="token number">6&#48;</span> <span class="token number">2&#48;18</span><span class="token operator">-</span><span class="token number">12</span><span class="token operator">-</span><span class="token number">&#48;2</span>
<span class="token number">1</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;5</span><span class="token operator">-</span><span class="token number">&#48;3</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;8</span><span class="token operator">-</span><span class="token number">&#48;1</span>  <span class="token number">9&#48;</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;5</span><span class="token operator">-</span><span class="token number">&#48;1</span>
<span class="token number">2</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">&#48;3</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">1&#48;</span><span class="token operator">-</span><span class="token number">&#48;1</span>  <span class="token number">9&#48;</span> <span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">&#48;1</span>
</code></pre>
<p>另一种方法是使用 <code>pandas</code> 包的内置函数 <code>DateOffset</code> ,它可以增加或减少天,月,年,周,小时,分钟,秒,微秒和纳秒。</p>
<pre class=" language-python"><code class="prism  language-python">df<span class="token punctuation">[</span><span class="token string">'D1'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span> <span class="token operator">-</span> pd<span class="token punctuation">.</span>DateOffset<span class="token punctuation">(</span>months<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">)</span>
</code></pre>
<h4 id="按日期过滤数据框">9.2 按日期过滤数据框</h4>
<p>假设您只想选择列 B 的值大于 2&#48;19 年 5 月 1 日的那些行。</p>
<pre class=" language-python"><code class="prism  language-python">df<span class="token punctuation">[</span>df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span><span class="token operator">&gt;</span>datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
</code></pre>
<h4 id="选择两个日期之间的数据">9.3 选择两个日期之间的数据</h4>
<p>假设您要在两个日期之间从 pandas 数据框中选择行(比如 5 月 1 日到 9 月 3&#48; 日之间)。</p>
<pre class=" language-python"><code class="prism  language-python">df<span class="token punctuation">[</span>df<span class="token punctuation">.</span>B<span class="token punctuation">.</span>between<span class="token punctuation">(</span>datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span><span class="token number">9</span><span class="token punctuation">,</span><span class="token number">3&#48;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">]</span>

<span class="token comment"># OR</span>
df<span class="token punctuation">[</span><span class="token punctuation">(</span>df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span> <span class="token operator">&gt;</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">&amp;</span> <span class="token punctuation">(</span>df<span class="token punctuation">[</span><span class="token string">'B'</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span><span class="token number">9</span><span class="token punctuation">,</span><span class="token number">3&#48;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
</code></pre>
<h3 id="如何使用不同的时区">1&#48;. 如何使用不同的时区</h3>
<p>很多时候我们在不同的时区有日期值,我们需要将它转换为我们当地的时区。手动解决这个问题并不容易。在 python 中,有一个名为 <code>pytz</code> 的库用于设置和转换时区。</p>
<p>您可以通过提交此命令找到所有时区。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token keyword">import</span> pytz
pytz<span class="token punctuation">.</span>all_timezones
</code></pre>
<p>要在特定时区设置日期时间对象(比如说亚洲/加尔各答),可以使用名为 <code>tzinfo</code> 的参数。</p>
<pre class=" language-python"><code class="prism  language-python">dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">&#48;</span><span class="token punctuation">,</span> tzinfo<span class="token operator">=</span>pytz<span class="token punctuation">.</span>timezone<span class="token punctuation">(</span><span class="token string">'Asia/Kolkata'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre>
<p>要将其转换为美国/亚利桑那州时区,我们可以使用名为 <code>astimezone</code> 的方法进行转换。如果你观察到转换后的日期已经改变,是因为这两个时区之间的差异超过 12 小时。</p>
<pre class=" language-python"><code class="prism  language-python"><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> dt <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">(</span><span class="token number">2&#48;19</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">2&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">1&#48;</span><span class="token punctuation">,</span> <span class="token number">&#48;</span><span class="token punctuation">,</span> tzinfo<span class="token operator">=</span>pytz<span class="token punctuation">.</span>timezone<span class="token punctuation">(</span><span class="token string">'Asia/Kolkata'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">2&#48;</span> <span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">1&#48;</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span><span class="token operator">+</span><span class="token number">&#48;5</span><span class="token punctuation">:</span><span class="token number">53</span>
            
<span class="token operator">&gt;&gt;</span><span class="token operator">&gt;</span> <span class="token keyword">print</span><span class="token punctuation">(</span>dt<span class="token punctuation">.</span>astimezone<span class="token punctuation">(</span>pytz<span class="token punctuation">.</span>timezone<span class="token punctuation">(</span><span class="token string">'US/Arizona'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">2&#48;19</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token operator">-</span><span class="token number">19</span> <span class="token number">21</span><span class="token punctuation">:</span><span class="token number">17</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span><span class="token operator">-</span><span class="token number">&#48;7</span><span class="token punctuation">:</span><span class="token number">&#48;&#48;</span>
</code></pre>
</div>
</div>
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群