【问题标题】:How can I convert HH:MM:SS string to UNIX epoch time?如何将 HH:MM:SS 字符串转换为 UNIX 纪元时间?
【发布时间】:2013-08-25 08:46:41
【问题描述】:

我有一个程序 (sar command line utility) 输出它的行和时间列。我用我的 python 脚本解析这个文件,我想将 sar 的02:31:33 PM 转换为纪元,例如1377181906(当前年份、月份和日期,以及来自上述字符串的小时、分钟和秒)。如何以不那么繁琐的方式做到这一点?我尝试自己做这件事,但坚持使用时间/日期时间和他们的方法。

【问题讨论】:

  • 不完全是骗子,因为我没有年/日/月。我可以使用strptime,但它会将缺失值初始化为 1900 年 1 月 1 日。我可以自己检索缺失值并将它们附加到字符串中,但这属于 cumbersome 类别。
  • 是的,因此我没有将其标记为欺骗/投票关闭。 Strptime 是我会这样做的方式(我只是将日期/时间设置为现在,然后像 @alecxe 所做的那样解析..

标签: python datetime time


【解决方案1】:

这是一种方法:

  • 使用strptime将字符串读入日期时间
  • 通过replace将日期时间对象的年月日设置为当前日期的年月日
  • 通过calendar.timegm将日期时间转换为unix时间戳

>>> from datetime import datetime
>>> import calendar
>>> dt = datetime.strptime("02:31:33 PM", "%I:%M:%S %p")
>>> dt_now = datetime.now()
>>> dt = dt.replace(year=dt_now.year, month=dt_now.month, day=dt_now.day)
>>> calendar.timegm(dt.utctimetuple())
1377138693

请注意,在 python >= 3.3 中,您可以通过调用 dt.timestamp() 从日期时间获取时间戳。

另见:

【讨论】:

    【解决方案2】:

    另一种获得纪元时间的方法是使用时间模块中的 mktime 并传递日期的时间元组,因此您可以这样做:

    >>> from datetime import datetime
    >>> from time import mktime
    >>> dt = datetime.strptime("02:31:33 PM", "%H:%M:%S %p")
    >>> dt_now = datetime.now()
    >>> dt = dt.replace(year=dt_now.year, month=dt_now.month, day=dt_now.day)
    >>> int(mktime(dt.timetuple()))
    1377131493
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2016-06-09
      • 2013-01-25
      • 2021-12-18
      • 2018-01-27
      • 2011-02-14
      相关资源
      最近更新 更多