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. 文心一言 VS 讯飞星火 VS chatgpt (81)-- 算法导论7.4 6题

    六.如果用go语言,考虑对 PARTITION 过程做这样的修改:从数组 A 中随机选出三个元素,并用这三个元素的中位数(即这三个元素按大小排在中间的值)对数组进行划分.求以a 的函数形式表示的.最坏 ...

  2. 用一个示例来学习DockerFile

    在Docker的世界里,我们经常会听到Dockerfile这个词.那么,什么是Dockerfile?它如何工作?本文将简要介绍Dockerfile的基本概念,原理以及一些常用的Dockerfile命令 ...

  3. Fetch设置超时请求

    promise + fetch + AbortController + setTimeOut 这是一段正常的fetch请求 fetch('www.baidu.com',{}) .then(res=&g ...

  4. 【保姆级安装使用教程#1】Xshell与Xftp的下载、安装和使用

    1. 下载 官网下载地址:==Xshell与Xftp下载地址== 当然也可以用鄙人的百度网盘连接下载这是链接:链接百度网盘下载Xshell与Xftp分别下载Xshell与Xftp 2. 安装Xshel ...

  5. 研发三维GIS系统笔记/实现wgs84投影-001

    1. 工作内容,改造引擎,支持wgs84投影 改造原因:目前投影是墨卡托投影(与Google Map一致) 目前的GIS系统是二维的采用这个坐标系是没有问题的 但不支持wgs84瓦片数据以及高程数据, ...

  6. 如何查询4GL程序中创建的临时表中的数据

    前提:将dba_segments这个表的select权限授权给各个营运中心(即数据库用户) ①.用sys账号以dba的权限登录数据库 <topprod:/u1/topprod/tiptop> ...

  7. 低代码助力微信小程序对接,提升开发效率

    摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 微信小程序相信大家都用过,相较于APP,微信小程序的优势在于其便 ...

  8. 使用VSCode新建解决方案,添加ClassLib类库工程

    最近准备全面转向VSCode开发C#代码,所以第一件事就是使用VSCode新建解决方案,添加工程. 通过ChatGPT找到的大致的实现方案: 首先,打开VS Code的终端,然后导航到您想要创建解决方 ...

  9. Vue之键盘事件

    1.使用keydown触发事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  10. P8815 [CSP-J 2022] 逻辑表达式

    Problem 考察算法:后缀表达式计算.建表达式树.\(DFS\). 题目简述 给你一个中缀表达式,其中只有 \(\&\) 和 \(\mid\) 两种运算. 求:\(\&\) 和 \ ...