如何在Python中将时间列表转换为Unix时间戳?

2 投票
1 回答
2412 浏览
提问于 2025-04-17 12:58

我现在用这个来获取延迟:

def time_deltas(infile): 
entries = (line.split() for line in open(INFILE, "r")) 
ts = {}  
for e in entries: 
    if " ".join(e[2:5]) == "TMsg out: [O]": 
        ts [e[8]] = e[0]  
    elif " ".join(e[2:5]) == "TMsg in: [A]":    
        in_ts, ref_id = e[0], e[7] 
        out_ts = ts.pop(ref_id, None) 
        yield (float(out_ts),ref_id[1:-1],(float(in_ts)*1000 - float(out_ts)*1000))


INFILE = 'C:/Users/klee/Documents/test.txt'
print list (time_deltas(INFILE))

我想把 float(out_ts) 转换成 Unix 时间戳(也就是从1970年1月1日开始的秒数)。

我试过以下方法,但都失败了:

int(time.mktime(time.strptime('(out_ts)', '%H%M%S.%f'))) - time.timezone

还有

 t = time.strptime(float(out_ts), "%H%M%S.%f")
        print "Epoch Seconds:", time.mktime(t.timetuple())

还有

d = datetime.strptime("out_ts", "%H%M%S.%f")
        time.mktime(d.timetuple())

还有

pattern = "%H%M%S.%f"
epoch = int(time.mktime(time.strptime(out_ts, pattern))
print 'epoch'

这里有一个我想转换的时间示例:

82128.668173

我对 Python 还很陌生,任何帮助都会很感激!!

1 个回答

1

strptime() 函数的作用是把字符串转换成时间或日期。所以如果 out_ts 是一个浮点数,你首先需要把它转换成字符串,比如:

>>> out_ts = 82128.668173
>>> time.strptime(str(out_ts), '%H%M%S.%f')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=21, tm_sec=28, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>> datetime.strptime(str(out_ts), '%H%M%S.%f')
datetime.datetime(1900, 1, 1, 8, 21, 28, 668173)

不过,你不能把这些日期转换成纪元时间(epoch time),因为纪元时间是从1970年1月1日开始经过的秒数,而 out_ts 只包含小时、分钟和秒的信息,所以你得到的日期/时间是1900年的。

你需要明确你想要计算哪个日期的纪元时间。这个例子中的时间是8:21:28,但你想要的是1970年1月1日的这个时间,今天的日期,还是其他某个日期呢?

一个简单的方法是使用 datetime.timedelta 对象来表示你的时间,然后把它加到你想要的日期的 datetime 对象上,比如:

>>> from datetime import datetime, timedelta
>>> out_ts = 82128.668173
>>> dt = datetime.strptime(str(out_ts), '%H%M%S.%f')
>>> td = timedelta(hours=dt.hour, minutes=dt.minute, seconds=dt.second)
>>> td
datetime.timedelta(0, 30088)
>>> date = datetime(2012, 2, 13)
>>> full_time = date + td
>>> full_time
datetime.datetime(2012, 2, 13, 8, 21, 28)
>>> epoch = time.mktime(full_time.timetuple())
>>> epoch
1329150088.0

撰写回答