8

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

4

2 回答 2

9

这是一种方法:

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

>>> 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()从日期时间获取时间戳。

另见:

于 2013-08-22T14:45:45.787 回答
4

另一种获得纪元时间的方法是使用时间模块中的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
于 2013-08-22T15:17:06.353 回答