【问题标题】:Convert string into datetime.time object将字符串转换为 datetime.time 对象
【发布时间】:2012-12-27 01:39:00
【问题描述】:

鉴于string 格式为"HH:MM",例如"03:55",表示3 小时55 分钟

我想将其转换为datetime.time 对象以便于操作。最简单的方法是什么?

【问题讨论】:

    标签: python time python-datetime


    【解决方案1】:

    使用datetime.datetime.strptime() 并在结果上调用.time()

    >>> datetime.datetime.strptime('03:55', '%H:%M').time()
    datetime.time(3, 55)
    

    .strptime() 的第一个参数是要解析的字符串,第二个是预期的格式。

    【讨论】:

    • 我有一个问题,strptime 在使用此方法时会假定一个日期。
    • @user4933: strptime() 不做任何假设。它不猜测,它没有启发式方法。它只能解析与您提供的确切格式匹配的字符串。如果您有意外的输出,您需要修复您对方法调用的使用。
    【解决方案2】:
    >>> datetime.time(*map(int, '03:55'.split(':')))
    datetime.time(3, 55)
    

    【讨论】:

    • 虽然它确实有效,但与使用 datetime.strptime() 的解决方案相比,我发现阅读起来不太清楚。
    • 截至今天,此方法无效,导致TypeError: descriptor 'time' for 'datetime.datetime' objects doesn't apply to a 'int' object
    【解决方案3】:

    未来的读者可能不太清楚,但*map 方法的速度要快 10 倍以上。请参见下文并在您的代码中做出明智的决定。如果多次调用此检查并且速度很重要,请使用生成器(“地图”)。

    In [31]: timeit(datetime.strptime('15:00', '%H:%M').time())
    7.76 µs ± 111 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    
    
    In [28]: timeit(dtime(*map(int, SHUTDOWN_AT.split(':'))))
    696 ns ± 11.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 2019-03-28
      • 2014-01-14
      • 2011-08-02
      • 2016-06-10
      相关资源
      最近更新 更多