Skip to main content
 首页 » 编程设计

python之如何在 Python 中将时间列表转换为 Unix 纪元时间

2025年05月04日8lyj

我目前正在使用它来获取延迟:

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 纪元秒。

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

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 的新手,如有任何帮助,我将不胜感激!!

请您参考如下方法:

strptime() 函数将字符串转换为时间或日期,因此如果 out_ts 是 float ,您首先需要将其转换为字符串,例如:

>>> 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) 

但是,您无法将这些日期转换为纪元时间,因为纪元时间是自 1970 年 1 月 1 日以来经过的秒数,并且因为 out_ts 仅包含小时/分钟/秒信息,您正在获取 1900 年的日期/时间。

您需要阐明要计算纪元时间的日期。此示例的时间是 8:21:28,但您希望它是 1/1/1970、今天还是其他日期?

将任意日期添加到您的时间的一种简单方法是使用 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