<p><a href="https://docs.python.org/3/library/datetime.html#datetime.datetime.toordinal" rel="nofollow noreferrer">^{<cd1>}</a>只考虑datetime对象的'date'部分,而不考虑时间。<a href="https://docs.python.org/3/library/datetime.html#datetime.date.toordinal" rel="nofollow noreferrer">^{<cd2>}</a>也一样-它只有一个日期部分。列表中的前2个和后2个元素的datetimes在同一个日期但在不同的时间,而<code>.toordinal</code>会忽略这些。因此,<code>.toordinal</code>将为这些日期相同的日期时间提供相同的值。你知道吗</p>
<p>一般来说,解决方法是计算日期与预先确定/固定日期之间的差值。我使用的是<code>datetime.datetime(1, 1, 1)</code>,最早的datetime,所以所有的delta都是正值:</p>
<pre><code>thurser = []
# assuming t is a list of datetime objects
for d in t:
delta = d - datetime.datetime(1, 1, 1)
thurser.append(delta.days + delta.seconds/(24 * 3600))
>>> print(thurser)
[693149.25, 693149.5, 705555.3333333334, 705555.0]
</code></pre>
<p>如果你喜欢整数而不是浮点数,那么用秒代替天:</p>
<pre><code>thurser.append(int(delta.total_seconds())) # total_seconds has microseconds in the float
>>> print(thurser)
[59888095200, 59888116800, 60959980800, 60959952000]
</code></pre>
<p>在第二个示例中,要恢复原始值:</p>
<pre><code>>>> [datetime.timedelta(seconds=d) + datetime.datetime(1, 1, 1) for d in thurser]
[datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0),
datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
>>> _ == t # compare with original values
True
</code></pre>