Python进行时间戳转换为标准时间

Python进行时间戳转换为标准时间

Python处理时间和时间戳的内置模块有timedatetime,本文主要使用time模块进行处理

一.时间戳相关知识

时间戳根据位数的不同,其对应的精读也不同,具体分为:10位(秒级),13位(毫秒级),16位(微秒级),19位(纳秒级)。本文主要处理10位(秒级),13位(毫秒级)的时间戳的转换问题。

  1. 时间戳( timestamp )

    • 简介:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,是一个float类型

    • 展示形式:1597397024.765705

  2. 时间元祖( 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)

    其中具体每项的含义:

    索引属性含义
    0tm_year
    1tm_mon
    2tm_mday
    3tm_hour
    4tm_min
    5tm_sec
    6tm_wday一周中的第几天
    7tm_yday一年中的第几天
    8tm_isdst夏令时
  3. 格式化时间 / 标准时间( format string )

    • 简介:格式化时间,时间格式标准化,可读性强;包括自定义格式和固定格式
    • 展现形式:2020-08-14 17:37:03
  4. 时间格式转换图
    《Python进行时间戳转换为标准时间》

  5. 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
      
  6. 时间日期格式化符号

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

本文参考的博客:

    原文作者:ncut_wxj
    原文地址: https://blog.csdn.net/ncut_wxj/article/details/108011326
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞