【问题标题】:Parse time string in python [duplicate]在python中解析时间字符串[重复]
【发布时间】:2012-10-02 01:17:44
【问题描述】:

可能重复:
How to construct a timedelta object from a simple string

我有一个格式为hours:minutes:seconds 的字符串,但它不是一天中的某个时间,而是一个持续时间。例如,100:00:00 表示 100 hours

我正在尝试查找与当前时间相差字符串中指定的时间量的时间。我可以使用正则表达式手动拆分时间字符串并将其转换为秒并将其添加到time.time() 返回的浮点数中,但是有time 函数来执行此操作吗?

time.strptime() 函数格式似乎适用于时间/日期字符串,而不是任意字符串。

【问题讨论】:

  • 看起来不错,我找不到那个。谢谢!
  • timedelta 在这里应该很有用。
  • 这道题和重复题不一样,这道题有明确的输入(hh:mm:ss)并以秒为单位输出,另一道的输入和timedelta作为输出的格式不太常见。跨度>

标签: python


【解决方案1】:
import datetime
dur_str = "100:00:00"
h, m, s = map(int, dur_str.split(':'))
dur = datetime.timedelta(hours=h, minutes=m, seconds=s)

【讨论】:

  • 不错!忘了你可以直接传递小时、分钟、秒值。
  • 不过,这不适用于像 'mm:ss' 这样的较短格式..
  • 引用提问者的话,“我有一个格式为hours:minutes:seconds...的字符串”实际上很容易让它处理短格式;仅以 .split(':') 中的元素数量为条件。
【解决方案2】:

不使用re,但有时理解正则表达式比编写 python 需要更多的工作。

>>> import datetime
>>> time_str = "100:00:00"
>>> hours, minutes, seconds = [int(i) for i in time_str.split(":")]
>>> time_in_seconds = hours * 60 * 60 + minutes * 60 + seconds
>>> time_in_seconds
360000
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2012, 10, 2, 10, 24, 6, 639000)
>>> new_time = now + datetime.timedelta(seconds=time_in_seconds)
>>> new_time
datetime.datetime(2012, 10, 6, 14, 24, 6, 639000)

正如 nneonneo 指出的那样,datetime.timedelta() 接受 hoursminutesseconds 作为参数。所以你甚至可以做这样的傻事(不推荐):

>>> datetime.timedelta(**{k:v for k,v in zip(["hours", "minutes", "seconds"], [int(i) for i in "100:00:00".split(":")])})
datetime.timedelta(4, 14400)

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2019-08-26
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多