更改持续时间字符串(以秒为单位)

时间:2019-08-02 21:56:57

标签: python string time

我目前正在使浏览器游戏自动化。在游戏中,您可以升级事物,并且升级需要花费多长时间,字符串如下:2d 4h 20m 19s 我想比较不同的升级时间,所以我想把时间缩短为几秒钟,以便比较。

我的想法是看几点,然后得到那个字母的索引,寻找字母前面的数字,但是我认为那是太多的代码行,尤其是如果我必须这样做的话不止一次。

我的主意是这样的:

if "d" in string:
    a = string.index("d")
if a == 2:
    b = string[a-2] * 10 + string[a-1]
    seconds = b * 86400

3 个答案:

答案 0 :(得分:0)

您可以使用.split()拆分字符串,为您提供一个列表:['2d', '4h', '20m', '19s']

现在我们可以分别处理每个部分。

我们还可以使用转换字典根据后缀为我们提供要使用的数字:

mod = {"d": 60*60*24, "h": 60*60, "m": 60, "s": 1}

然后我们将列表求和,将每个数字乘以上面的mod:

sum(int(value[:-1]) * mod[value[-1]] for value in ds.split())

这等效于:

total = 0
for value in ds.split():
    number = int(value[:-1])  # strip off the units and convert the number to an int
    unit = value[-1]  # take the last character
    total += number * mod[unit]

其中ds是日期字符串输入。

答案 1 :(得分:0)

下面,我尝试将过程分为几个基本步骤:

In [1]: timestring = '2d 4h 20m 19s'                                                                     
Out[1]: '2d 4h 20m 19s'

In [2]: items = timestring.split()                                                                       
Out[2]: ['2d', '4h', '20m', '19s']

In [3]: splititems = [(int(i[:-1]), i[-1]) for i in items]                                               
Out[3]: [(2, 'd'), (4, 'h'), (20, 'm'), (19, 's')]

In [4]: factors = {'h': 3600, 'm': 60, 's': 1, 'd': 24*3600}                                             
Out[4]: {'h': 3600, 'm': 60, 's': 1, 'd': 86400}

In [5]: sum(a*factors[b] for a, b in splititems)                                                         
Out[5]: 188419

就像每个代码一样,这有一些基本假设:

  • 不同单位之间用空格隔开。
  • 单位仅为一个代码点(字符)。
  • 允许的单位是天,小时,分钟和秒。
  • 数字是整数。

答案 2 :(得分:0)

在时间增量上有一个有用的total_seconds()方法。

给出

import datetime as dt


names = ["weeks", "days", "minutes", "hours", "seconds"]
s = "2d 4h 20m 19s"

代码

做出重新映射的名称/值对的字典,并传递给timedelta

remap = {n[0]: n for n in names}
name_time = {remap[x[-1]]: int(x[:-1]) for x in s.split()}
td = dt.timedelta(**name_time)
td.total_seconds()
# 188419.0