将两个时间戳浮点数转换为可读的年、月和日数

bwr*_*wrr 0 python algorithm datetime date-arithmetic python-datetime

我有两个以浮点格式存储的时间戳:

tms1 = 1479081600.0
tms2 = 1482105600.0
Run Code Online (Sandbox Code Playgroud)

计算差异后我得到

tms2 - tms1
3024000.0
Run Code Online (Sandbox Code Playgroud)

如何将 3024000 的时差显示为可读格式(以天、月或年为单位)?(使用在线unix时差计算器,答案是2016年11月14日至2016年12月19日之间的35天)

Iza*_*gen 6

您可以使用(在importing之后datetime

datetime.timedelta(seconds=3024000).days
Run Code Online (Sandbox Code Playgroud)

这是

35
Run Code Online (Sandbox Code Playgroud)

您应该使用timedelta,因为这是时间增量 - 时间差异,而不是绝对时间。timedelta还可以通过将 a 强制转换为字符串来获得完整的表示形式:

print(datetime.timedelta(seconds=3024000))
Run Code Online (Sandbox Code Playgroud)

给出输出:

35 days, 0:00:00
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要任何在线计算器 -datetime附带电池。你可以这样做:

import datetime

date_format = "%d %b %Y"

start_date = datetime.datetime.strptime("14 Nov 2016", date_format)
end_date = datetime.datetime.strptime("19 Dec 2016", date_format)

print(start_date == datetime.datetime.fromtimestamp(1479081600))

print(start_date)
print(end_date.strftime("%d/%m/%Y"))

diff = end_date - start_date

print(diff)
print(diff.days)
Run Code Online (Sandbox Code Playgroud)

其输出:

True
2016-11-14 00:00:00
19/12/2016
35 days, 0:00:00
35
Run Code Online (Sandbox Code Playgroud)

请注意,diff这里与原始对象相同timedelta,但是从datetimes 动态创建的,而不是静态构造的。我还演示了这样一个事实:如果您愿意,您可以根据时间戳构建日期时间,并且我还冒昧地进行了演示strftime等来说明日期时间的强大功能。我强烈推荐这种datetime方法而不是算术方法,因为它更具可读性和可扩展性。

这个答案非常轻量级,这并不一定是坏事,因为通常您可能不需要比它提供的功能更多的功能,但timedelta例如,如果两天之间的时间少于 24 小时,则会四舍五入到 0 天。它也无法处理时区。如果您需要其中任何一个,请参阅传奇雷蒙德的精彩答案