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. 深信服 9-15笔试 C卷

    深信服 9-15笔试 C卷 15题填空,4道编程 填空 填空比较基础,考察了数据结构(队列,二叉树),和简单编程,二进制等. 1.1 2 3 4 5 入队,然后队首弹出,6 7 8 9 10 入队,然 ...

  2. 一文搞懂 OTP 双因素认证

    GitHub 在 2023 年 3 月推出了双因素认证(two-factor authentication)简称 2FA,并且承诺所有在 GitHub 上贡献的开发者在 2023 年底前启用双因素认证 ...

  3. 「codeforces - 687D」Dividing Kingdom II

    link. 好题啊. 首先有一个类 kruskal 暴力,就是对于每一个询问,把所有边按权值大小排降序,第一个加进去成为奇环的边就是答案.注意我们不需要关注偶环长成什么样子,所以我们实际上维护的是一棵 ...

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

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

  5. Python基于Flask的高校舆情分析,舆情监控可视化系统

    一.前言在当今社会,舆情监控越来越被重视.随着互联网技术的发展,我们从传统媒体渠道.官方报告.调查问卷等方式搜集到的舆情信息,逐渐被网络上的内容所替代.因为网络上的内容传播速度快.及时性强.覆盖范围广 ...

  6. Github 组合搜索开源项目 (超详细)

    例如搜索 Spring Boot 相关项目  spring boot (最简单最常用) in:name spring boot (匹配项目名字)  in:name spring boot stars: ...

  7. Oracle:查询表的统计信息,手动收集统计信息

    在Oracle中,存在执行计划不准的情况,怀疑表的统计信息是否收集,需要以下操作:select table_name,num_rows,blocks,last_analyzed from user_t ...

  8. Sunshine on my shoulders

    https://music.163.com/#/song?id=1477706 Sunshine on my shoulders makes me happy照在我肩上的阳光让我欢乐Sunshine ...

  9. 01-linux - kvm

    配置linux kvm 逻辑卷 # df -h # fdisk -l | grep dev # pvs # pvcreate /dev/sdg # pvs # vgcreate oradata /de ...

  10. CF451B

    题目简化和分析: 这题就是判断将一段翻转后是否能变为升序的数组. 我的方法是保存原数组每一个数出现的位置(相同任意一个),让后另外用一个数组存储排好序后的原数组,逐一进行比较. 若同,则跳到下一个元素 ...