Python中奇怪的日期时间差异

cat*_*gar 3 python datetime

有人能告诉我为什么python会在两个日期之间显示1310秒的差异?

import datetime
time1=datetime.datetime(2016,12,8,20,5,0)
time2=datetime.datetime(2016,12,7,19,43,10)
timediff=time1-time2
print(timediff)
print(timediff.seconds)

>1 day, 0:21:50
>1310
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

正如你可以看到这里一个timedelta对象有三个字段:days; seconds; 和microseconds.或者如文档中指定的那样:

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

(......)

内部只存储了几天,几秒和几微秒.参数转换为这些单位:

  • 毫秒转换为1000微秒.
  • 一分钟转换为60秒.
  • 一小时转换为3600秒.
  • 一周转换为7天.

(格式已添加)

Althout构造为timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0),从而提供途径进入小时,因此,它转换minutes,hours等所有秒.构造函数看起来像:

def __init__(self, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0):
    self.microseconds = microseconds+1000*milliseconds
    self.seconds = seconds+60*minutes+3600*hours+self.microseconds//1000000
    self.microseconds %= 1000000
    self.days = days+7*weeks+self.seconds//86400
    self.seconds %= 86400
Run Code Online (Sandbox Code Playgroud)

(但可能更高级,等等)

这意味着.seconds实际上是模数日,没有微秒.

但是,您可以使用timediff.total_seconds返回总秒数:

>>> timediff.total_seconds()
87710.0
Run Code Online (Sandbox Code Playgroud)

所以total_seconds()基本上是:

def total_seconds(self):
    return 86400.0*self.days+self.seconds+1e-6*self.microseconds
    #      ^ number of seconds in a day   ^
    #                                     | 1 micro is 1e-6
Run Code Online (Sandbox Code Playgroud)

如果你除以你131060,你会看到它返回:

>>> 1310/60 # obtain number of minutes
21.833333333333332
>>> 1310%60 # obtain number of seconds  (without minutes)
50
Run Code Online (Sandbox Code Playgroud)

所以21分50秒