首页 > 编程语言 >【纯手工打造】时间戳转换工具(python)

【纯手工打造】时间戳转换工具(python)

时间:2023-12-16 15:44:43浏览次数:21  
标签:python timestamp self datetime current 纯手工 result text 打造

1.背景

最近发现一个事情,如果日志中的时间戳,需要我们转换成时间,增加可读性。或者将时间转换成时间戳,来配置时间。相信大多人和我一样,都是打开网页,搜索在线时间戳转换工具,然后复制粘贴进去。个人认为可以手工打造一个python版本的时间戳转换工具,来解放双手,减少打开网页的时间,于是乎就产生了自己做个小工具的想法。

2.实际效果

废话不多说,直接上做出来的工具截图

是的,你没看错,这工具是有可视化界面的,而且是exe单文件,window上可以直接运行,而且拥有多个复制按钮,方便我们操作

3.实现原理

借用python的tmath库、datetime库轻松搞定,然后借助tkinter实现可视化界面,借用pyinstaller命令,将python项目一键构建exe单文件。这些库都可以用pip安装,不再赘述。

4.源码

废话不多说,直接上源码

import tkinter as tk
from datetime import datetime
import math, pyperclip, os

class DateTimeConverterApp:
    def __init__(self, master):
        self.master = master
        self.master.title("Tom-时间戳工具")

        # Left Frame
        self.left_frame = tk.Frame(self.master)
        self.left_frame.grid(row=0, column=0, padx=20, pady=20)
        self.clock_canvas = tk.Canvas(self.left_frame, width=300, height=300)
        self.clock_canvas.grid(row=0, column=0, columnspan=2)

        # Current DateTime Label and Copy Button
        self.current_datetime_label = tk.Label(self.left_frame, text="时间:")
        self.current_datetime_label.grid(row=1, column=0, sticky="e", padx=10)
        self.copy_datetime_button = tk.Button(self.left_frame, text="复制", command=self.copy_current_datetime)
        self.copy_datetime_button.grid(row=1, column=1, sticky="w", pady=5)

        # Current Timestamp Label and Copy Button
        self.current_timestamp_label = tk.Label(self.left_frame, text="时间戳:")
        self.current_timestamp_label.grid(row=2, column=0, sticky="e", padx=10)
        self.copy_timestamp_button = tk.Button(self.left_frame, text="复制", command=self.copy_current_timestamp)
        self.copy_timestamp_button.grid(row=2, column=1, sticky="w", pady=5)

        # Right Frame
        self.right_frame = tk.Frame(self.master)
        self.right_frame.grid(row=0, column=2, padx=20, pady=20)

        self.right_label1 = tk.Label(self.right_frame, text="请输入时间戳")
        self.right_label1.grid(row=1, column=0, padx=10)

        self.timestamp_entry = tk.Entry(self.right_frame)
        self.timestamp_entry.grid(row=1, column=1, padx=10)

        self.convert_button = tk.Button(self.right_frame, text="转为时间", command=self.convert_to_datetime)
        self.convert_button.grid(row=1, column=2, padx=10)

        self.right_label2 = tk.Label(self.right_frame, text="转换结果")
        self.right_label2.grid(row=2, column=0, padx=10)

        self.result_label = tk.Label(self.right_frame, text="1970-01-01 00:00:00")
        self.result_label.grid(row=2, column=1, padx=10)

        self.copy_result_button = tk.Button(self.right_frame, text="复制结果", command=self.copy_result_datetime)
        self.copy_result_button.grid(row=2, column=2, padx=10)

        tk.Label(self.right_frame, text="").grid(row=3)
        tk.Label(self.right_frame, text="").grid(row=4)

        self.right_label3 = tk.Label(self.right_frame, text="请输入日期时间")
        self.right_label3.grid(row=5, column=0, padx=10)
        
        self.datetime_entry = tk.Entry(self.right_frame)
        self.datetime_entry.grid(row=5, column=1, padx=10)

        self.convert_button2 = tk.Button(self.right_frame, text="转为时间戳", command=self.convert_to_timestamp)
        self.convert_button2.grid(row=5, column=2, padx=10)

        self.right_label4 = tk.Label(self.right_frame, text="转换结果")
        self.right_label4.grid(row=6, column=0, padx=10)

        self.result_label2 = tk.Label(self.right_frame, text="0000000000", anchor="w")
        self.result_label2.grid(row=6, column=1, padx=10)

        self.copy_result_button2 = tk.Button(self.right_frame, text="复制结果", command=self.copy_result_timestamp)
        self.copy_result_button2.grid(row=6, column=2, padx=10)

        # Start updating the clock
        self.update_clock()

        # Start updating current time and timestamp
        self.update_current_datetime_and_timestamp()

    def update_current_datetime_and_timestamp(self):
        current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        current_timestamp = self.datetime_to_timestamp(datetime.now())
        self.current_datetime_label.config(text=f"时间: {current_datetime}")
        self.current_timestamp_label.config(text=f"时间戳: {current_timestamp}")

        # Schedule the update after 1000 milliseconds (1 second)
        self.master.after(1000, self.update_current_datetime_and_timestamp)
    
    def update_clock(self):
        # Clear the canvas
        self.clock_canvas.delete("all")

        # Get the current time
        current_time = datetime.now()
        hours = current_time.hour
        minutes = current_time.minute
        seconds = current_time.second

        # Draw clock face
        self.clock_canvas.create_oval(50, 50, 250, 250, fill="#C7DFEE")

        # Draw hour hand
        hour_angle = math.radians((hours % 12) * 30 - 90)
        hour_length = 50
        hour_x = 150 + hour_length * math.cos(hour_angle)
        hour_y = 150 + hour_length * math.sin(hour_angle)
        self.clock_canvas.create_line(150, 150, hour_x, hour_y, width=4, fill="blue")

        # Draw minute hand
        minute_angle = math.radians(minutes * 6 - 90)
        minute_length = 80
        minute_x = 150 + minute_length * math.cos(minute_angle)
        minute_y = 150 + minute_length * math.sin(minute_angle)
        self.clock_canvas.create_line(150, 150, minute_x, minute_y, width=3, fill="green")

        # Draw second hand
        second_angle = math.radians(seconds * 6 - 90)
        second_length = 100
        second_x = 150 + second_length * math.cos(second_angle)
        second_y = 150 + second_length * math.sin(second_angle)
        self.clock_canvas.create_line(150, 150, second_x, second_y, width=2, fill="red")

        # Draw clock numbers
        for i in range(12):
            angle = math.radians(i * 30 - 60)
            num_x = 150 + 90 * math.cos(angle)
            num_y = 150 + 90 * math.sin(angle)
            self.clock_canvas.create_text(num_x, num_y, text=str(i + 1), font=("Helvetica", 12, "bold"))

        # Schedule the update after 1000 milliseconds (1 second)
        self.master.after(1000, self.update_clock)


    def convert_to_datetime(self):
        input_str = self.timestamp_entry.get()
        try:
            timestamp = float(input_str)
            result = self.timestamp_to_datetime(timestamp)
            self.result_label.config(text=result)
        except ValueError:
            self.result_label.config(text="输入的格式错误")

    def convert_to_timestamp(self):
        input_str = self.datetime_entry.get()
        try:
            datetime_obj = datetime.strptime(input_str, '%Y-%m-%d %H:%M:%S')
            result = self.datetime_to_timestamp(datetime_obj)
            self.result_label2.config(text=result)
        except ValueError:
            self.result_label2.config(text="输入的格式错误")

    def datetime_to_timestamp(self, dt):
        timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
        return int(timestamp)

    def timestamp_to_datetime(self, timestamp):
        dt = datetime.utcfromtimestamp(timestamp)
        return dt.strftime('%Y-%m-%d %H:%M:%S')
    
    def copy_result_datetime(self):
        result_datetime = self.result_label.cget("text")
        pyperclip.copy(result_datetime)

    def copy_result_timestamp(self):
        result_timestamp = self.result_label2.cget("text")
        pyperclip.copy(result_timestamp)

    def copy_current_datetime(self):
        current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        pyperclip.copy(current_datetime)

    def copy_current_timestamp(self):
        current_timestamp = self.datetime_to_timestamp(datetime.now())
        pyperclip.copy(str(current_timestamp))

if __name__ == "__main__":
    root = tk.Tk()
    app = DateTimeConverterApp(root)
    root.mainloop()

标签:python,timestamp,self,datetime,current,纯手工,result,text,打造
From: https://www.cnblogs.com/mikeCao/p/17904907.html

相关文章

  • Python高级之模块导入
    模块导入与包的使用【一】模块与包概要模块(Module):定义:在Python中,模块是一个包含Python代码的文件。这些文件以.py为扩展名,可以包含变量、函数和类等,文件名为xxx.py,模块名则是xxx,导入模块可以引用模块中已经写好的功能。作用:模块提供了一种组织代码的方式,将相关的功......
  • Python学习之十五_不同类型数据库表内容比较
    Python学习只十五_不同类型数据库表内容比较前言最近学习力总结了很多Python相关的内容本次想继续学习一下不同数据库之间的数据比较.这样理论上可以极大的缩减不同数据库测试成本.感谢Python以及之前大拿的各种资料.这个学习还是表简单与单纯.理论上可以通过标准SQL......
  • Python学习之十六_virsh批量获取虚拟机IP地址的方法
    Python学习之十六_virsh批量获取虚拟机IP地址的方法Linux命令说明forjin\$(foriin`virshlist|grep-vId|greprunning|awk'{print$2}'`;\dovirshdumpxml$i|grep"macaddress"|awk-F\''{print$2}'&&e......
  • Python 以类作为装饰器 几种使用场景
    1.原函数、装饰器都没有参数代码:classTest:def__init__(self,func):print('Bein__init__process...')self.__func=funcdef__call__(self):print("...Startdecorate...")self.__func()prin......
  • 基于LSTM模型的时间序列预测(车厢重量预测),Python中Keras库实现LSTM,实现预测未来未知数
    简介LSTM是一种常用的循环神经网络,其全称为“长短期记忆网络”(LongShort-TermMemoryNetwork)。相较于传统的循环神经网络,LSTM具有更好的长期记忆能力和更强的时间序列建模能力,因此在各种自然语言处理、语音识别、时间序列预测等任务中广泛应用。问题场景:对一节火车进行装载货物,......
  • python操作文件夹
    帮我写一个python程序遍历文件夹下所有的压缩文件,如ziprar7z结尾的文件等等当然可以!以下是一个Python程序,它可以遍历指定文件夹下的所有压缩文件,如zip、rar、7z等等。你可以根据需要修改代码中的路径和文件类型。请注意,这个程序需要安装第三方库patool和pyunpack,你可以使用pip......
  • 使用Python Multiprocessing库提升代码性能
    在现代计算机编程中,利用多核处理器的能力来提高应用程序的执行速度至关重要。Python的multiprocessing库就是为此而生的,它允许程序员创建进程,这些进程可以在多个CPU核心间并行运行,从而提高程序的性能。在这篇技术博客中,我们将探索multiprocessing库的关键概念及其在Python中的应用......
  • Python NumPy 线性代数
    ​ 1、矩阵和向量积矩阵和向量积可以用 numpy.dot() 函数来计算。numpy.dot()函数的两个参数分别是矩阵和向量。1)矩阵积矩阵积是两个矩阵相乘的结果。矩阵积的计算方法是将矩阵的每一行与另一个矩阵的每一列相乘,然后将各个相乘结果相加。示例代码:PythonNumPy线性代数-......
  • python高级之包
    包1、包就是一个含有__init__.py文件的文件夹2、为何要有包?包的本质是模块的一种形,包是用来当作模块被导入#1.产生一个名称空间#2.运行包下__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中。#3.在当前执行文件的名称空间中拿到一个名字mmm,mmm指向1的名称空间im......
  • python高级之软件开发的目录规范
    软件开发的目录规范为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。软件的目录规范并无硬性标准,只要清晰可读即可,假设你的软件名为foo,笔者推荐目录结构如下Foo/|--core/||--core.py||--api/||--api.py||--db/|......