对时间数据进行保存或者运算时,通常可以用时间戳来处理,用时间戳表示的时间来进行加、减、乘、除、积分、微分运算和比较大小都很方便。但是在画图设置标签(time labels),或者输出时间数据时,需要把时间戳转化为字符串,以方便人类阅读。有些时候,还需要把时间字符串的精度保留到ms精度,类似于11点25分34.88秒,但是time.localtime产生时间字符串似乎没有毫秒ms。为了解决这个问题,先后编写了四个版本的函数来把list里面的时间戳转化为字符串,感觉第四版最好用。
函数测试结果如下:
time2str1st结果:
2021-08-28 08:38:31
2021-10-04 15:42:14
time2str2nd结果 不能输出ms: ['2021-08-28 08:38:31', '2021-10-04 15:42:14']
time2str3rd结果: ['2021-08-28 08:38:310.33299', '2021-10-04 15:42:140.09999']
time2str4th结果: ['2021-08-28 08:38:31.333000', '2021-10-04 15:42:14.100000']
代码如下
##功能:把时间戳转化为时间'%Y-%m-%d %H:%M:%S.%f'
##第一版 :输入字符串时间 2021年9月1日 ###########################
def time2str1st(obsTimeStamp,timeFormat='%Y-%m-%d %H:%M:%S'): ## 时间戳转化为可读型时间
import time
obsTimeStruct = time.localtime(obsTimeStamp) ## 结构型时间
obsDate = time.strftime(timeFormat, obsTimeStruct) ## 可读型时间
return(obsDate)
################################################################
##第二版:输入输出均为list 2021年10月26日 不可输出ms ###########################
def time2str2nd(timeStampList,timeFormat='%Y-%m-%d %H:%M:%S'): ## 时间戳转化为可读型时间
import time
timeStrList = list()
for timeStamp in timeStampList:
timeStruct = time.localtime(timeStamp) ## 结构型时间
timeStr = time.strftime(timeFormat,timeStruct) ## 可读型时间
timeStrList.append(timeStr)
return(timeStrList)
################################################################
##不可输出ms 的原因在于time.struct_time中没有ms 的字段
##time.struct_time(tm_year=2021, tm_mon=10, tm_mday=2, tm_hour=23, tm_min=39, tm_sec=48, tm_wday=5, tm_yday=275, tm_isdst=0)
##第三版:输入输出均为list 2021年10月26日 可输出ms 但是丑###########################
def time2str3rd(timeStampList,timeFormat='%Y-%m-%d %H:%M:%S'): ## 时间戳转化为可读型时间
import time
if '.%f' in timeFormat:
miliSecFlag = 1
timeFormat = timeFormat[0:len(timeFormat)-3]
else:
miliSecFlag = 0
timeStrList = list()
for timeStamp in timeStampList:
miliSec = timeStamp-int(timeStamp)
miliSec = int(miliSec*100000)/100000
miliSec = str(miliSec)
timeStruct = time.localtime(timeStamp) ## 结构型时间
timeStr = time.strftime(timeFormat,timeStruct) ## 可读型时间
if miliSecFlag==1:
timeStr = timeStr+miliSec
timeStrList.append(timeStr)
return(timeStrList)
################################################################
###第四版: 输入输出均为list 2021年11月16日 可输出ms ###########################
def time2str4th(timeStampList,timeFormat='%Y-%m-%d %H:%M:%S'): ## 时间戳转化为可读型时间
import datetime
timeStrList = list()
for timeStamp in timeStampList:
d = datetime.datetime.fromtimestamp(timeStamp) # datetime类型 精确到毫秒
timeStr = d.strftime(timeFormat) #字符串时间
timeStrList.append(timeStr)
return(timeStrList)
################################################################
timeStampList = [1630111111.333,1633333334.1]##list中的时间
print('time2str1st结果:')
for timeStamp in timeStampList:
print(time2str1st(timeStamp,'%Y-%m-%d %H:%M:%S'))
print('time2str2nd结果 不能输出ms:',time2str2nd(timeStampList,'%Y-%m-%d %H:%M:%S'))
print('time2str3rd结果:',time2str3rd(timeStampList,'%Y-%m-%d %H:%M:%S.%f'))
print('time2str4th结果:',time2str4th(timeStampList,'%Y-%m-%d %H:%M:%S.%f'))