擅长:python、mysql、java
<p>您的问题是您使用的是<code>datetime</code>(和<code>struct_tm</code>等)对象。所以你要问的是2018年5月15日10:25:00“不管这台机器上的本地时区是什么”中的“Unix纪元”有多远。如果你在两台时区相隔5小时的机器上运行它,你会得到相隔5*3600*1000毫秒的结果。在</p>
<p>建议的方法是:</p>
<pre><code>d.timestamp() # returns difference from epoch as float seconds
</code></pre>
<p>…或:</p>
^{pr2}$
<p>(很明显,如何将这些值转换为浮点数,或者您需要的任何其他值。)</p>
<p>但这两种方法在这里都没有任何区别,因为您仍然使用天真的datetime对象。(至少您没有混入<code>time</code>模块中的其他类型并放弃精度,但您没有解决您的问题。)</p>
<hr/>
<p>问题的解决取决于你想做什么。这些是UTC时间戳吗?它们是在某个已知时区的时间戳吗?在</p>
<p>如果一切都是UTC,最好的做法是显式地创建UTC对象,但最简单的事情(尤其是需要在2.7中运行代码的情况下)是:</p>
<pre><code>d - datetime.utcfromtimestamp(0)
</code></pre>
<p>这将给您一个表示自纪元起0 UTC秒的原始日期时间,并从表示纪元以来X UTC秒的原始日期时间中减去它,这样您就得到了一个表示X秒的<code>timedelta</code>,而不管系统使用的是哪个时区。在</p>
<p>或者,对现有代码的最小更改是使用<code>utctimetuple</code>而不是{<cd6>},这将以更复杂的方式执行相同的操作。在</p>