将 timedelta 转换为天、小时和分钟
我有一个时间增量。我想要其中的天数、小时数和分钟数 - 无论是作为元组还是字典......我并不大惊小怪。
多年来我一定用十几种语言做过十几次这样的事情,但 Python 通常对所有事情都有一个简单的答案,所以我想我应该在这里问一下,然后再搞出一些简单得令人作呕(但又冗长)的数学。
福兹先生提出了一个很好的观点。
我正在处理“列表”(有点像 eBay 列表),其中每个列表都有一个持续时间。我正在尝试通过执行 when_added +uration - now
来查找剩余时间。
我说的对吗?这不能解释 DST?如果不是,加/减一个小时最简单的方法是什么?
I've got a timedelta. I want the days, hours and minutes from that - either as a tuple or a dictionary... I'm not fussed.
I must have done this a dozen times in a dozen languages over the years but Python usually has a simple answer to everything so I thought I'd ask here before busting out some nauseatingly simple (yet verbose) mathematics.
Mr Fooz raises a good point.
I'm dealing with "listings" (a bit like ebay listings) where each one has a duration. I'm trying to find the time left by doing when_added + duration - now
Am I right in saying that wouldn't account for DST? If not, what's the simplest way to add/subtract an hour?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
如果您有一个
datetime.timedelta
值td
,td.days
已经为您提供了您想要的“天”。 timedelta 值将一天的一小部分保留为秒(而不是直接的小时或分钟),因此您确实必须执行“令人作呕的简单数学”,例如:If you have a
datetime.timedelta
valuetd
,td.days
already gives you the "days" you want.timedelta
values keep fraction-of-day as seconds (not directly hours or minutes) so you'll indeed have to perform "nauseatingly simple mathematics", e.g.:这是更紧凑一点,你可以在两行中得到小时、分钟和秒。
This is a bit more compact, you get the hours, minutes and seconds in two lines.
至于 DST,我认为最好的办法是将两个
datetime
对象都转换为秒。这样系统就会为您计算 DST。As for DST, I think the best thing is to convert both
datetime
objects to seconds. This way the system calculates DST for you.对于所有正在寻找实现的人:
以上帖子与 datetime.timedelta 相关,遗憾的是它没有小时和秒的属性。到目前为止还没有提到有一个包包含这些。您可以在这里找到它:
示例 - 计算:
示例 - 属性:
我希望这可以帮助某人......
For all coming along and searching for an implementation:
The above posts are related to datetime.timedelta, which is sadly not having properties for hours and seconds. So far it was not mentioned, that there is a package, which is having these. You can find it here:
Example - Calculation:
Example - Properties:
I hope this could help someone...
我不明白
这个怎么样
你得到一分钟的分钟和秒作为浮动。
I don't understand
how about this
You get minutes and seconds of a minute as a float.
我使用了以下内容:
I used the following:
这是我整理的一个小函数,可以精确到微秒:
这是一个返回元组的版本:
Here is a little function I put together to do this right down to microseconds:
Here is a version that returns a
tuple
:虽然pandas.Timedelta没有直接提供这些属性,但它确实提供了一个名为total_seconds的方法,基于该方法可以轻松导出天、小时和分钟:
While
pandas.Timedelta
does not provide these attributes directly, it indeed provide a method calledtotal_seconds
, based on which days, hours, and minutes can be easily derived:如果你使用 python datetime 包,你也可以像下面这样编码:
While if you are using python datetime package, you can also code like below:
我发现最简单的方法是使用
str(timedelta)
。它将返回一个格式类似于3 days, 21:06:40.001000
的字符串,您可以使用简单的字符串操作或正则表达式来解析小时和分钟。I found the easiest way is using
str(timedelta)
. It will return a sting formatted like3 days, 21:06:40.001000
, and you can parse hours and minutes using simple string operations or regular expression.将返回类似以下内容:
will return something like:
这是另一种可能的方法,尽管比已经提到的方法稍微冗长一些。对于这种情况,这可能不是最好的方法,但能够方便地获取未存储在对象中的特定单位的持续时间(周、小时、分钟、毫秒),并且无需记住或计算转换系数。
应该将
[2, 18, 30]
分配给dmh_list
This is another possible approach, though a bit wordier than those already mentioned. It maybe isn't the best approach for this scenario but it is handy to be able to obtain your time duration in a specific unit that isn't stored within the object (weeks, hours, minutes, milliseconds) and without having to remember or calculate conversion factors.
Which should assign
[2, 18, 30]
todmh_list
如果使用pandas(至少版本>1.0),
Timedelta
类有一个components
属性,它返回一个包含所有字段的命名元组布置。例如
If using pandas (at least version >1.0), the
Timedelta
class has acomponents
attribute that returns a named tuple with all the fields nicely laid out.e.g.
timedeltas 有一个
天
和秒
属性..您可以轻松地自己转换它们。timedeltas have a
days
andseconds
attribute .. you can convert them yourself with ease.