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. 程序员视角下的API数据接口对接指南

    ​ 在当今互联网时代,许多应用程序和网站都需要使用第三方的API接口来获取数据.API(Application Programming Interface)允许不同的应用程序之间进行数据交互,从而提高 ...

  2. API接口获取快手商品详情(封装代码)

    快手是中国最大的短视频平台之一,也是许多电商企业进行推广的重要渠道.为了更好地了解快手的商品信息,我们可以通过API接口来获取商品详情. 首先,我们需要了解快手API接口和相应的文档 接下来,我们需要 ...

  3. WPF学习 - 自定义Panel

    WPF中的Panel(面板),是继承自FrameworkElement的抽象类,表示一个可以用来排列子元素的面板. 在WPF中,一种预设了几种常用的面板,如Grid.StackPanel.WrapPa ...

  4. 【译】IntelliJ IDEA 2023.2 最新变化——JetBrains IDE 中的 AI 助手

    前言 本周所有基于 IntelliJ 的 IDE 和 .NET 工具的 EAP 版本都包含一个主要新功能:AI Assistant.本博文重点介绍我们基于 IntelliJ 的 IDE,并且即将推出专 ...

  5. Stream流的应用

    Stream流的应用 Collectors.groupingBy(ShopCartItemDto::getShopId) stream()方法将该列表转化为一个流,可以对其中的元素进行操作. coll ...

  6. Docker 镜像库国内加速的几种方法

    概述 在国内,拉取 Docker 镜像速度慢/时不时断线/无账号导致限流等,比较痛苦. 这里提供加速/优化的几种方法. 梳理一下,会碰到以下情况: 国内下载速度慢/时不时断线:是因为网络被限制了. 没 ...

  7. Jquery 将 JSON 列表的 某个属性值,添加到数组中,并判断一个值,在不在数据中

    jquery 将 JSON 列表的 某个属性值,添加到数组中 如果你有一个JSON列表,并且想要将每个对象的某个属性值添加到数组中,你可以使用jQuery的$.each()函数来遍历JSON列表,并获 ...

  8. Springboot+Guava实现单机令牌桶限流

    令牌桶算法 系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时 ...

  9. DESTOON做中英双语言(多语言)切换版本具体详解

    第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...

  10. 12 款最棒 Vue 开源 UI 库

    文章目录 Element Plus - 经典中的经典,全面支持 Vue 3 TDesign Vue - 鹅厂优质 UI 组件,配套工具完满,设计工整,文档清晰 ArcoDesign Vue- 字节优质 ...