如何解决为什么python datetime在减去两个日期时不给出负秒和小时?
我想知道为什么我没有从 datetime.timedelta 得到负小时和负秒?
我有以下方法
def time_diff(external_datetime,internal_datetime):
from pandas.core.indexes.period import parse_time_string # include for completeness
time_external = parse_time_string(external_datetime)[0]
time_internal = parse_time_string(internal_datetime)[0]
diff = time_external - time_internal
return diff
当日期时间看起来像这些时,一切都符合预期;
external_datetime = "2020-01-01T00:00:00"
internal_datetime = "2020-01-02T00:00:00"
返回的是 -1 天 (datetime.timedelta(days=-1)
) 的 datetime.timedelta
为什么当我将时间更改为;
external_datetime = "2020-01-01T00:00:00"
internal_datetime = "2020-01-01T01:30:00"
我有 datetime.timedelta(days=-1,seconds=81000)
的差异吗
我确实想知道是不是因为“接近”午夜,但是
external_datetime = "2020-01-01T11:00:00"
internal_datetime = "2020-01-01T11:30:00"
结果为 datetime.timedelta(days=-1,seconds=84600)
版本
- python 3.8.2
- 熊猫 1.1.4
解决方法
计算中的时间通常基于超过参考时间的秒数(或某个秒数单位)。我假设 Python 的 DateTime 将数据表示为一天开始后的小时、分钟、秒和秒的子单位。因此,seconds
永远不会是负数。因为它总是在几秒之后,所以走 -1 天 + 84600 秒是有意义的,这样秒是正数。
来自documentation for timedelta
:
内部仅存储天、秒和微秒。参数 转换为这些单位:
- 毫秒转换为 1000 微秒。
- 一分钟转换为 60 秒。
- 1 小时转换为 3600 秒。
- 一周转换为 7 天。
然后将天、秒和微秒标准化,以便 表示是唯一的,具有
0 <= microseconds < 1000000
-
0 <= seconds < 3600*24
(一天中的秒数) -999999999 <= days <= 999999999
因此秒数和微秒数保证为非负数,天数根据需要为正数或负数。让较大的单位 days
为正或负是有意义的,因为这将占任意区间的大部分。 days
的负值可能略高于必要值,使用更小、有限的单位来弥补差异。
请注意,在这种表示中,间隔的符号仅由天的符号决定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。