服务器系统时间修改器
下面是一个安全的服务器系统时间修改器的图形界面实现,这个工具允许管理员查看当前时间并谨慎地修改系统时间,同时提供必要的安全措施和操作日志。

import tkinter as tk
from tkinter import ttk, messagebox
import datetime
import socket
import os
import sys
import subprocess
import logging
from logging.handlers import RotatingFileHandler
class ServerTimeEditor:
def __init__(self, root):
self.root = root
self.root.title("服务器系统时间修改器")
self.root.geometry("800x600")
self.root.resizable(True, True)
self.root.configure(bg="#f5f5f5")
# 设置日志
self.setup_logging()
# 获取服务器信息
self.server_name = socket.gethostname()
self.os_type = sys.platform
# 创建UI
self.create_widgets()
# 初始更新时间显示
self.update_time()
# 日志操作
self.log_action("应用程序启动")
def setup_logging(self):
"""配置日志记录"""
if not os.path.exists('logs'):
os.makedirs('logs')
self.logger = logging.getLogger("TimeEditor")
self.logger.setLevel(logging.INFO)
# 创建滚动日志文件处理器
handler = RotatingFileHandler(
'logs/time_editor.log',
maxBytes=5*1024*1024, # 5 MB
backupCount=3
)
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
handler.setFormatter(formatter)
self.logger.addHandler(handler)
def log_action(self, message):
"""记录操作日志"""
self.logger.info(message)
# 同时更新UI中的日志显示
self.log_text.configure(state='normal')
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.log_text.insert(tk.END, f"[{timestamp}] {message}n")
self.log_text.configure(state='disabled')
self.log_text.see(tk.END) # 滚动到底部
def create_widgets(self):
"""创建界面组件"""
# 创建主框架
main_frame = ttk.Frame(self.root, padding=20)
main_frame.pack(fill=tk.BOTH, expand=True)
# 标题
title_label = ttk.Label(
main_frame,
text="服务器系统时间修改器",
font=("Arial", 16, "bold"),
foreground="#2c3e50"
)
title_label.pack(pady=10)
# 服务器信息
info_frame = ttk.LabelFrame(main_frame, text="服务器信息", padding=10)
info_frame.pack(fill=tk.X, pady=10)
ttk.Label(info_frame, text=f"服务器名称: {self.server_name}", font=("Arial", 10)).pack(anchor="w")
ttk.Label(info_frame, text=f"操作系统: {self.get_os_name()}", font=("Arial", 10)).pack(anchor="w")
ttk.Label(info_frame, text=f"当前用户: {os.getlogin()}", font=("Arial", 10)).pack(anchor="w")
# 时间显示区域
time_frame = ttk.LabelFrame(main_frame, text="当前系统时间", padding=15)
time_frame.pack(fill=tk.X, pady=10)
self.time_var = tk.StringVar()
time_label = ttk.Label(
time_frame,
textvariable=self.time_var,
font=("Courier", 24, "bold"),
foreground="#3498db"
)
time_label.pack(pady=5)
self.date_var = tk.StringVar()
date_label = ttk.Label(
time_frame,
textvariable=self.date_var,
font=("Arial", 14),
foreground="#7f8c8d"
)
date_label.pack(pady=5)
# 更新时间按钮
update_btn = ttk.Button(
time_frame,
text="更新时间显示",
command=self.update_time,
style="Accent.TButton"
)
update_btn.pack(pady=10)
# 时间修改区域
edit_frame = ttk.LabelFrame(main_frame, text="修改系统时间", padding=15)
edit_frame.pack(fill=tk.X, pady=10)
# 日期选择
ttk.Label(edit_frame, text="设置日期:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
self.date_entry = ttk.Entry(edit_frame, width=15)
self.date_entry.grid(row=0, column=1, padx=5, pady=5, sticky="w")
self.date_entry.insert(0, datetime.datetime.now().strftime("%Y-%m-%d"))
ttk.Label(edit_frame, text="格式: YYYY-MM-DD").grid(row=0, column=2, padx=5, pady=5, sticky="w")
# 时间选择
ttk.Label(edit_frame, text="设置时间:").grid(row=1, column=0, padx=5, pady=5, sticky="w")
self.time_entry = ttk.Entry(edit_frame, width=15)
self.time_entry.grid(row=1, column=1, padx=5, pady=5, sticky="w")
self.time_entry.insert(0, datetime.datetime.now().strftime("%H:%M:%S"))
ttk.Label(edit_frame, text="格式: HH:MM:SS").grid(row=1, column=2, padx=5, pady=5, sticky="w")
# 修改按钮
change_btn = ttk.Button(
edit_frame,
text="修改系统时间",
command=self.change_system_time,
style="Warning.TButton"
)
change_btn.grid(row=2, column=0, columnspan=3, pady=15)
# 操作日志区域
log_frame = ttk.LabelFrame(main_frame, text="操作日志", padding=10)
log_frame.pack(fill=tk.BOTH, expand=True, pady=10)
self.log_text = tk.Text(log_frame, height=8, state='disabled', wrap=tk.WORD)
self.log_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
scrollbar = ttk.Scrollbar(log_frame, command=self.log_text.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.log_text.config(yscrollcommand=scrollbar.set)
# 状态栏
self.status_var = tk.StringVar()
self.status_var.set("就绪")
status_bar = ttk.Label(self.root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
status_bar.pack(side=tk.BOTTOM, fill=tk.X)
# 样式配置
self.style = ttk.Style()
self.style.configure("Accent.TButton", background="#3498db", foreground="white")
self.style.configure("Warning.TButton", background="#e74c3c", foreground="white")
def get_os_name(self):
"""获取操作系统名称"""
if self.os_type == "linux" or self.os_type == "linux2":
return "Linux"
elif self.os_type == "darwin":
return "macOS"
elif self.os_type == "win32":
return "Windows"
return "Unknown OS"
def update_time(self):
"""更新当前时间显示"""
now = datetime.datetime.now()
self.time_var.set(now.strftime("%H:%M:%S"))
self.date_var.set(now.strftime("%Y年%m月%d日 星期") + ["一", "二", "三", "四", "五", "六", "日"][now.weekday()])
self.root.after(1000, self.update_time)
self.status_var.set("时间显示已更新")
def change_system_time(self):
"""修改系统时间"""
new_date = self.date_entry.get()
new_time = self.time_entry.get()
# 验证日期格式
try:
datetime.datetime.strptime(new_date, "%Y-%m-%d")
except ValueError:
messagebox.showerror("错误", "日期格式无效!请使用 YYYY-MM-DD 格式")
return
# 验证时间格式
try:
datetime.datetime.strptime(new_time, "%H:%M:%S")
except ValueError:
messagebox.showerror("错误", "时间格式无效!请使用 HH:MM:SS 格式")
return
# 确认对话框
if not messagebox.askyesno(
"确认修改",
f"您确定要将系统时间修改为:n{new_date} {new_time}?nn"
"警告:修改系统时间可能影响服务器运行!"
):
return
# 根据操作系统执行不同命令
try:
if self.os_type == "win32":
# Windows 系统
subprocess.run(f'date {new_date}', shell=True, check=True)
subprocess.run(f'time {new_time}', shell=True, check=True)
self.log_action(f"系统时间已修改为: {new_date} {new_time}")
self.status_var.set(f"系统时间已成功修改为 {new_date} {new_time}")
messagebox.showinfo("成功", "系统时间已成功修改")
else:
# Linux/macOS 系统
datetime_str = f"{new_date} {new_time}"
subprocess.run(f'date -s "{datetime_str}"', shell=True, check=True)
self.log_action(f"系统时间已修改为: {datetime_str}")
self.status_var.set(f"系统时间已成功修改为 {datetime_str}")
messagebox.showinfo("成功", "系统时间已成功修改")
except subprocess.CalledProcessError as e:
self.log_action(f"修改系统时间失败: {str(e)}")
self.status_var.set("错误: 修改系统时间失败")
messagebox.showerror("错误", f"修改系统时间失败: {str(e)}")
except Exception as e:
self.log_action(f"发生未知错误: {str(e)}")
self.status_var.set("错误: 发生未知错误")
messagebox.showerror("错误", f"发生未知错误: {str(e)}")
def run(self):
self.root.mainloop()
if __name__ == "__main__":
# 检查管理员权限
if os.name == 'nt':
import ctypes
if not ctypes.windll.shell32.IsUserAnAdmin():
messagebox.showerror("权限错误", "此程序需要管理员权限运行!")
sys.exit(1)
else:
if os.geteuid() != 0:
messagebox.showerror("权限错误", "此程序需要使用root权限运行!")
sys.exit(1)
root = tk.Tk()
app = ServerTimeEditor(root)
app.run()
功能说明
这个服务器系统时间修改器具有以下功能:
-
服务器信息显示:
- 显示服务器名称
- 显示操作系统类型
- 显示当前用户
-
时间显示区域:

- 实时显示当前系统时间和日期
- 每秒自动更新时间显示
-
时间修改功能:
- 日期设置(YYYY-MM-DD格式)
- 时间设置(HH:MM:SS格式)
- 修改前确认对话框
- 支持Windows和Linux系统
-
安全特性:
- 启动时检查管理员/root权限
- 操作前需要确认
- 格式验证确保输入正确
-
日志记录:

- 记录所有操作(启动、时间修改等)
- 日志显示在界面中
- 日志文件滚动存储(最大5MB,保留3个备份)
使用说明
- 程序启动时会自动检测权限,需要管理员(root)权限运行
- 界面顶部显示服务器信息和当前时间
- 在”修改系统时间”区域输入新的日期和时间
- 点击”修改系统时间”按钮,确认后修改时间
- 所有操作会记录在日志区域和日志文件中
注意事项
- 修改系统时间可能对服务器运行产生严重影响,请谨慎操作
- 建议在维护窗口期间进行时间修改
- 修改时间后,请检查依赖时间的服务是否正常运行
- 生产环境修改时间前建议创建系统快照或备份
此工具为管理员提供了安全、便捷的时间修改方式,同时通过日志记录确保操作可追溯。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/289764.html

