<p>首先,让我们使用<a href="https://docs.python.org/3/library/datetime.html#datetime.datetime.strptime" rel="nofollow noreferrer">^{<cd2>}</a>和<a href="https://docs.python.org/3/library/datetime.html#datetime.datetime.date" rel="nofollow noreferrer">^{<cd3>}</a>方法从字符串中创建<code>datetime.date</code>对象,因为<code>datetime.date</code>对象是有序的,更容易使用:</p>
<pre><code>date_format = '%Y-%m-%d'
dates = [datetime.datetime.strptime(date_string,
date_format).date()
</code></pre>
<p>然后我们过滤掉将来(今天之后)发生的日期</p>
^{pr2}$
<p>然后我们可以使用<code>min</code>找到下一个最近的日期</p>
<pre><code>next_closest_date = min(future_dates)
</code></pre>
<p>这给了我们</p>
<pre><code>>>>next_closest_date
2017-09-01
</code></pre>
<p>举个例子</p>
<hr/>
<h2>警告</h2>
<p>如果今天之后没有日期,这将导致如下错误</p>
<pre><code>ValueError: min() arg is an empty sequence
</code></pre>
<p>{case>如果我们不想让它的值为空</p>
<pre><code>next_closest_date = min(future_dates, default=None)
</code></pre>
<hr/>
<p>最后我们可以写一个函数如下</p>
<pre><code>import datetime
# `default` value is returned when there is no future date strings found
def get_next_closest_date(date_strings, date_format, default=None):
today = datetime.date.today()
dates = [datetime.datetime.strptime(date_string,
date_format).date()
for date_string in date_strings]
future_dates = [date
for date in dates
if date >= today]
return min(future_dates, default)
</code></pre>
<p>像这样使用它</p>
<pre><code>scheduledatelist = ['2017-09-01', '2017-09-09', '2017-09-16', '2017-09-23',
'2017-09-30', '2017-10-07', '2017-10-14', '2017-10-21',
'2017-10-27', '2017-11-11', '2017-11-18', '2017-11-25']
next_closest_date = get_next_closest_date(date_strings=scheduledatelist,
date_format='%Y-%m-%d')
print(next_closest_date)
</code></pre>