Python处理时间和时间戳的内置模块有time
和datetime
,本文主要使用time
模块进行处理
时间戳根据位数的不同,其对应的精读也不同,具体分为:10位(秒级),13位(毫秒级),16位(微秒级),19位(纳秒级)。本文主要处理10位(秒级),13位(毫秒级)的时间戳的转换问题。
时间戳( timestamp )
简介:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,是一个float类型
展示形式:1597397024.765705
时间元祖( struct_time )
简介:共9个元素,时间戳和格式化时间转换的桥梁
展现形式:time.struct_time(tm_year=2020, tm_mon=8, tm_mday=14, tm_hour=17, tm_min=23, tm_sec=44, tm_wday=4, tm_yday=227, tm_isdst=0)
其中具体每项的含义:
索引 | 属性 | 含义 |
---|---|---|
0 | tm_year | 年 |
1 | tm_mon | 月 |
2 | tm_mday | 日 |
3 | tm_hour | 时 |
4 | tm_min | 分 |
5 | tm_sec | 秒 |
6 | tm_wday | 一周中的第几天 |
7 | tm_yday | 一年中的第几天 |
8 | tm_isdst | 夏令时 |
格式化时间 / 标准时间( format string )
2020-08-14 17:37:03
time模块中与时间戳和时间相关的重要函数
time.time()
生成当前的时间戳,格式为10位整数的浮点数,其中在python中小数点后可精确到微秒,共计16位。
a = time.time()
print(a)
1597398562.799617
time.strftime()
根据时间元组生成时间格式化字符串。
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
2020-08-14 17:51:38
time.strptime()
根据时间格式化字符串生成时间元组。time.strptime()
与time.strftime()
为互操作。
print(time.strptime("2020-08-14 18:00:23","%Y-%m-%d %H:%M:%S"))
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=14, tm_hour=18, tm_min=0, tm_sec=23, tm_wday=4, tm_yday=227, tm_isdst=-1)
time.localtime()
根据时间戳生成当前时区的时间元组。
b = time.localtime()
print(b)
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=14, tm_hour=17, tm_min=51, tm_sec=38, tm_wday=4, tm_yday=227, tm_isdst=0)
time.mktime()
根据时间元组生成时间戳。
print(time.mktime(time.localtime()))
1597399027.0
时间日期格式化符号
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
主要工作是读取一个文件中的内容,将其中的16位的时间戳先进行截取得到13位的时间戳,之后通过转换函数,将13位的时间戳转换为秒级的标准格式的时间,之后将数据存入到MySQL数据库中
#coding=utf-8
import re
import time
import pymysql
# 输入毫秒级的时间,转出正常格式的时间
def timeStamp(timeNum):
timeStamp = float(timeNum/1000)
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print (otherStyleTime)
return otherStyleTime
def opData():
global sessionid
global plansessionid
global activityname
global starttimestamp
global finishtimestamp
global executeplace
global sfstatus
global falsereason
startTime=0
# 建立数据库连接
db = pymysql.connect(host="localhost",port=3306,user="root",password="123456",database="service_l_20200701_backup",charset="utf8")
# 获取游标对象
cursor = db.cursor()
# 插入数据语句
# _copy2
query = """insert into t_service_status_copy1 (session_id,plansession_id,activity_name,start_timestamp,finish_timestamp,execute_place,sf_status,false_reason) values (%s,%s,%s,%s,%s,%s,%s,%s) ON duplicate KEY UPDATE session_id = session_id"""
with open('trace1.data',"r") as f:
# data = f.readline()
for fLine in f:
startTime+=1;
x=fLine.split('|')
if(startTime < 10000):
# print("data:")
# print(data)
# print("fLine:")
# print(fLine)
for i in range(len(x)):
if i == 0:
num0 = re.sub(r'\D', "", x[i])
plansessionid = num0
# x1[1].replace("a-zA-Z",x1[1])
# print("x[0]:"+num0)
elif i == 1 :
temp=x[i][:-3]
x2 = int(temp)
time160 = timeStamp(x2)
starttimestamp = time160
# print("x[1]:" + time160)
elif i == 2 :
num2 = re.sub(r'\D', "", x[i])
sessionid = num2
# print("x[2]:" + num2)
elif i == 3:
num3 = re.sub(r'\D', "", x[i])
# print("x[3]:" + num3)
elif i == 4:
# print("x1="+x[1])
tempp1 = int(x[1])
tempp2 = int(x[i])
# print(tempp1)
# print(tempp2)
num4 = tempp1 + tempp2
# print(num4)
# num4 = int(x[1]) + int(x[i])
strTonum4=str(num4)
temp1 = strTonum4[:-3]
# temp1 = int(x[1][:-3])
mafan = int(temp1)
time161 = timeStamp(mafan)
finishtimestamp = time161
# print("x[4]:" + time161)
elif i == 5:
activityname = x[i]
# print("x[5]:"+x[i])
elif i == 7:
executeplace = x[i]
# print("x[7]:"+x[i])
elif i == 8:
line = "http.status_code=200"
m = x[i].find(line)
if m == -1:
sfstatus = "false"
falsereason = x[i]
else:
sfstatus = "success"
falsereason = ""
# print(m)
# print(sfstatus)
else:
print("x["+str(i)+"]:"+x[i])
values = (int(sessionid),int(plansessionid),str(activityname),str(starttimestamp),str(finishtimestamp),str(executeplace),str(sfstatus),str(falsereason))
cursor.execute(query, values)
pass
print(startTime)
# 关闭游标,提交,关闭数据库连接
# 如果没有这些关闭操作,执行后在数据库中查看不到数据
cursor.close()
db.commit()
db.close()
if __name__ == '__main__':
opData()
本文参考的博客: