Python:如何获得timedelta的总和?
例如.我刚收到很多timedelta对象,现在我想要总和.而已!
过去一小时我一直在挖掘Python文档和许多SO问题; 请原谅我是另一个被Python中时差之谜困住的Python新手.
我的目标是确定当前时间与特定日期/时间之间的差异,无论是在过去还是将来,并返回一个可行的格式,如秒.
例如,如果输入是下午2:00和下午4:00(现在),我希望它说"-7200",表示事件发生两个小时AGO.如果输入是下午4:00(现在)和太阳下午5:00,则输出应为"176400"秒,表示从现在开始的两天和一小时.
这是我试过的东西......
我的第一个版本是一个函数,它接受一个字符串时间戳并将其拼凑为多个变量,然后进行比较.它很笨拙有许多错误,我想如果我在这里发布它,我将负责程序员呕吐.
我偶然发现了这个神奇的timedelta函数,并探讨了文档和SO,但我不认为它符合我的要求.
我有想法将时间戳转换为自纪元以来的秒数然后减去,但如果减法的顺序错误(如果事件是将来的不同情况),这会成为一个问题,我想添加if语句来检查秒的标志是笨重的,有些东西可以避免.
这是我当前的代码(仍然需要修复"双向"比较),来自之前解决的SO问题:
now = time.strftime("%a %b %d %H:%M:%S %Y")
then = time.ctime(os.path.getmtime("x.cache"))
tdelta = datetime.strptime(now, '%a %b %d %H:%M:%S %Y') - datetime.strptime(then, '%a %b %d %H:%M:%S %Y')
Run Code Online (Sandbox Code Playgroud)
而且我觉得我应该以某种方式从这里拉出几秒钟,就像在这个问题中: Python的timedelta:我不能只是在任何时间进入单位我想要整个差异的价值?
但我对如何连接这些点感到迷茫.
我怎么能做到这一点?
将timedelta对象转换为datetime对象的正确方法是什么?
我立刻想到了类似的东西datetime(0)+deltaObj
,但那不是很好......是不是有某种toDateTime()
功能或类似的东西?
我有来自用户的原始输入,例如"2015-01-30"...对于我正在使用的查询,日期必须输入为字符串,如"yyyy-mm-dd".
我希望在我的循环结束时将日期增加1个月"2015-01-30"变为"2015-02-27"(理想情况下是下个月的最后一个工作日).我希望有人可以帮助我; 我正在使用PYTHON,我想转换为datetime的原因是我找到了一个添加1个月的功能.
理想情况下,我要回答的两个问题是(在Python中):
1)如何将字符串"yyyy-mm-dd"转换为python日期时间并在应用timedelta函数后转换回字符串
2)和/或如何将1个月添加到字符串"yyyy-mm-dd"
具体来说,考虑到我的服务器的时区(系统时间透视图)和时区输入,如何计算系统时间,就像它在新时区(无论夏令时等)一样?
import datetime
current_time = datetime.datetime.now() #system time
server_timezone = "US/Eastern"
new_timezone = "US/Pacific"
current_time_in_new_timezone = ???
Run Code Online (Sandbox Code Playgroud) 给定ISO 8601持续时间字符串,如何将其转换为datetime.timedelta
?
这不起作用:
timedelta("PT1H5M26S", "T%H%M%S")
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个timedelta
对象与另一个对象分开以计算服务器正常运行时间:
>>> import datetime
>>> installation_date=datetime.datetime(2010,8,01)
>>> down_time=datetime.timedelta(seconds=1400)
>>> server_life_period=datetime.datetime.now()-installation_date
>>> down_time_percentage=down_time/server_life_period
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'datetime.timedelta'
and 'datetime.timedelta'
Run Code Online (Sandbox Code Playgroud)
我知道这已经在Python 3.2中得到了解决,但除了计算微秒,秒和天数以及除以?之外,还有一种方便的方法可以在Python的早期版本中处理它吗?
谢谢,
亚当
我无法让我的django模板始终显示timedelta对象.我尝试在模板中使用时间过滤器,但是当我这样做时没有显示任何内容.如果我使用Assert False,timedelta对象在错误页面上显示如下:
time datetime.timedelta(0, 38, 132827)
Run Code Online (Sandbox Code Playgroud)
这会将时差显示为:
0:00:38.132827
我想只显示每个timedelta对象的小时,分钟和秒.有没有人对我如何做到这一点有任何建议?
我想diff
按小组计算.我不知道如何对time
列进行排序,以便每个组的结果都是排序的和正面的.
原始数据:
In [37]: df
Out[37]:
id time
0 A 2016-11-25 16:32:17
1 A 2016-11-25 16:36:04
2 A 2016-11-25 16:35:29
3 B 2016-11-25 16:35:24
4 B 2016-11-25 16:35:46
Run Code Online (Sandbox Code Playgroud)
我想要的结果
Out[40]:
id time
0 A 00:35
1 A 03:12
2 B 00:22
Run Code Online (Sandbox Code Playgroud)
注意:时间col的类型是timedelta64 [ns]
In [38]: df['time'].diff(1)
Out[38]:
0 NaT
1 00:03:47
2 -1 days +23:59:25
3 -1 days +23:59:55
4 00:00:22
Name: time, dtype: timedelta64[ns]
Run Code Online (Sandbox Code Playgroud)
没有得到理想的结果.
不仅解决问题,而且代码可以快速运行,因为有5000万行.
我有以下数据帧:
Time Work
2018-12-01 10:00:00 Off
2018-12-01 10:00:02 On
2018-12-01 10:00:05 On
2018-12-01 10:00:06 On
2018-12-01 10:00:07 On
2018-12-01 10:00:09 Off
2018-12-01 10:00:11 Off
2018-12-01 10:00:14 On
2018-12-01 10:00:16 On
2018-12-01 10:00:18 On
2018-12-01 10:00:20 Off
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列,其中包含自设备开始工作以来经过的时间.
Time Work Elapsed Time
2018-12-01 10:00:00 Off 0
2018-12-01 10:00:02 On 2
2018-12-01 10:00:05 On 5
2018-12-01 10:00:06 On 6
2018-12-01 10:00:07 On 7
2018-12-01 10:00:09 Off 0
2018-12-01 10:00:11 Off 0
2018-12-01 10:00:14 On 3
2018-12-01 10:00:16 On 5
2018-12-01 10:00:18 On …
Run Code Online (Sandbox Code Playgroud)