如何在python中加上日期时间?
How to plus datetime in python?
我有一个程序可以生成如下几种格式的日期时间。
1 day, 21:21:00.561566
11:19:26.056148
也许它有月或年格式,我想知道有什么方法可以加上我从程序中得到的所有时间。
您可以像这里一样减去日期时间来计算这两个时间相差多远:
添加两个日期并没有任何意义。例如,如果您尝试将 2020 年 1 月 1 日添加到 1995 年 1 月 1 日,您期望什么?
您可以使用 datatime.timedelta
class 来达到这个目的。
您可以找到文档 here.
您将需要解析您的字符串并构建一个 timedelta 对象。
- 1 day, 21:21:00.561566
是 datetime.timedelta
对象的字符串表示形式。如果你需要从字符串解析为timedelta,pandas
有一个合适的方法。还有其他第三方解析器;我只使用这个,因为 pandas
很常见。
import pandas as pd
td = pd.to_timedelta('- 11:19:26.056148')
# Timedelta('-1 days +12:40:33.943852')
td.total_seconds()
# -40766.056148
如果您需要找到多个时间增量值的总和,您可以 sum
将它们的 total_seconds
转换回 timedelta
:
td_strings = ['- 1 day, 21:21:00.561566', '- 11:19:26.056148']
td_sum = pd.Timedelta(seconds=sum([pd.to_timedelta(s).total_seconds() for s in td_strings]))
td_sum
# Timedelta('-1 days +10:01:34.505418')
...或利用 Python 标准库中的一些工具:
from functools import reduce
from operator import add
td_sum = reduce(add, map(pd.to_timedelta, td_strings))
# Timedelta('-1 days +10:01:34.505418')
td_sum.total_seconds()
# -50305.494582
我有一个程序可以生成如下几种格式的日期时间。
1 day, 21:21:00.561566
11:19:26.056148
也许它有月或年格式,我想知道有什么方法可以加上我从程序中得到的所有时间。
您可以像这里一样减去日期时间来计算这两个时间相差多远:
添加两个日期并没有任何意义。例如,如果您尝试将 2020 年 1 月 1 日添加到 1995 年 1 月 1 日,您期望什么?
您可以使用 datatime.timedelta
class 来达到这个目的。
您可以找到文档 here.
您将需要解析您的字符串并构建一个 timedelta 对象。
- 1 day, 21:21:00.561566
是 datetime.timedelta
对象的字符串表示形式。如果你需要从字符串解析为timedelta,pandas
有一个合适的方法。还有其他第三方解析器;我只使用这个,因为 pandas
很常见。
import pandas as pd
td = pd.to_timedelta('- 11:19:26.056148')
# Timedelta('-1 days +12:40:33.943852')
td.total_seconds()
# -40766.056148
如果您需要找到多个时间增量值的总和,您可以 sum
将它们的 total_seconds
转换回 timedelta
:
td_strings = ['- 1 day, 21:21:00.561566', '- 11:19:26.056148']
td_sum = pd.Timedelta(seconds=sum([pd.to_timedelta(s).total_seconds() for s in td_strings]))
td_sum
# Timedelta('-1 days +10:01:34.505418')
...或利用 Python 标准库中的一些工具:
from functools import reduce
from operator import add
td_sum = reduce(add, map(pd.to_timedelta, td_strings))
# Timedelta('-1 days +10:01:34.505418')
td_sum.total_seconds()
# -50305.494582