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)的更多相关文章

  1. 纯手工打造简单分布式爬虫(Python)

    前言 这次分享的文章是我<Python爬虫开发与项目实战>基础篇 第七章的内容,关于如何手工打造简单分布式爬虫 (如果大家对这本书感兴趣的话,可以看一下 试读样章),下面是文章的具体内容. ...

  2. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...

  3. 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!

    前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...

  4. [置顶] 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!

    前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...

  5. 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!

    前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明Fine ...

  6. [置顶] 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!

    前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明Fine ...

  7. 纯手工打造(不使用IDE)java web 项目

    必备环境 1.编译器:jdk 2.web服务器:tomcat 3.文本编辑器:sublime,编写java文件和jsp文件,没有的话用记事本也行. 一.建立工程目录结构,如下图 在操作系统下完成即可, ...

  8. 纯手工打造dropdownlist控件

    先上图吧,看看效果. JS代码: ; (function ($) { var DropdownList = function (oDataSouce, oControlsContainer, oLis ...

  9. 用PHP纯手工打造会动的多帧GIF图片验证码

    效果演示: http://pcik.7di.net/pcik_reg 百度的效果演示: https://passport.baidu.com/cgi-bin/genimage?captchaservi ...

  10. 【C#】教你纯手工用C#实现SSH协议作为GIT服务端

    SSH(Secure Shell)是一种工作在应用层和传输层上的安全协议,能在非安全通道上建立安全通道.提供身份认证.密钥更新.数据校验.通道复用等功能,同时具有良好的可扩展性.本文从SSH的架构开始 ...

随机推荐

  1. P3742题解

    思路 只需要让z串做到和y串一样,就得让y串每个字母(题意如此)均小于x串. 所以只要x串有一项小于y串,那么就输出-1,否则输出y串. 下面是核心代码: #include<bits/stdc+ ...

  2. 【Java监控】使用SkyWalking监控Java服务

    你的Java服务是如何监控的呢? 1.Null:监控?什么监控?我一个写代码的服务挂了跟我有什么关系? 2.命令行:服务挂了?内存泄漏?jstat jmap jcmd,还好不是我写的 3.撸代码:Ja ...

  3. 关于XXLJOB集群模式下调度失败的问题

    xxljob在集群模式下调度高频任务时,有时会出现调度失败的问题,具体报错如下: java.io.EOFException: HttpConnectionOverHTTP@6be8bf0c(l:/10 ...

  4. XL-Formula流式统计运算方式配置说明

    1.简介 XL-Formula是一种用于描述流式统计运算方式的配置标准,它代表着一种通用型流式统计系统的实现方法,更深层次它代表着一种以通用型流式统计技术为切入点,低成本实现企业数据化运营的理念.该配 ...

  5. vue2原理初探-数据代理和数据劫持

    本篇文章主要想简单聊聊vue如何实现数据修改,页面联动的底层原理. 当然,篇幅有限,只是自己一些浅显的认知而已,我会从一下几个方面去聊,希望对你有所帮助. 几个基础知识点 数据代理 数据劫持 完整de ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (97)-- 算法导论9.3 3题

    三.用go语言,假设所有元素都是互异的,说明在最坏情况下,如何才能使快速排序的运行时间为O(nlgn). 文心一言: 快速排序是一种基于分治策略的排序算法,其平均时间复杂度为O(nlgn).在最坏情况 ...

  7. Teamcenter RAC 开发之《新建Item》

    private TCComponentItem createOperation(String itemName,String itemType) { //obejct_name itemType tr ...

  8. Istio 入门(六):版本控制

    目录 VirtualService 和 DestinationRule VirtualService 与 Service 的关系 VirtualService 和 DestinationRule 的关 ...

  9. 让物体动起来,Unity的几种移动方式

    一.前言 在大部分的Unity游戏开发中,移动是极其重要的一部分,移动的手感决定着游戏的成败,一个优秀的移动手感无疑可以给游戏带来非常舒服的体验.而Unity中有多种移动方法,使用Transform, ...

  10. P7073 [CSP-J2020] 表达式

    Problem 考察算法:后缀表达式建树,优化. 题目简述 读入一个后缀表达式,由 \(\&,\mid,!\) 三种运算和操作数构成. 有 \(q\) 次询问,每次输入一个下标 \(i\) , ...