3.9
好的,下面是完整的Python程序,它实现了手动计算给定日期是星期几的功能,并使用tkinter库创建了一个简单的图形用户界面(GUI)。该程序不依赖任何外部日期处理库,而是直接应用蔡勒公式进行计算。
完整的Python程序
Python
深色版本
import tkinter as tk
from tkinter import messagebox
def zellers_congruence(year, month, day):
"""
使用蔡勒公式计算给定日期是星期几。
返回0表示周六,1表示周日,依此类推到6表示周五。
"""
if month < 3:
month += 12
year -= 1
q = day
m = month
K = year % 100
J = year // 100
h = (q + ((13 * (m + 1)) // 5) + K + (K // 4) + (J // 4) - 2 * J) % 7
# 调整h以符合ISO标准(周一为0,周日为6)
h = (h + 5) % 7
return h
def calculate_day_of_week():
date_str = entry.get()
try:
year, month, day = map(int, date_str.split('-'))
if month < 1 or month > 12 or day < 1 or day > 31:
raise ValueError("Invalid date")
# 检查月份天数是否合法
if month in [4, 6, 9, 11] and day > 30:
raise ValueError("Invalid date")
if month == 2:
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
if day > 29:
raise ValueError("Invalid date")
elif day > 28:
raise ValueError("Invalid date")
day_of_week_index = zellers_congruence(year, month, day)
days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
day_of_week = days_of_week[day_of_week_index]
result_label.config(text=f"{date_str} 是 {day_of_week}")
except ValueError as e:
messagebox.showerror("输入错误", str(e))
# 创建主窗口
root = tk.Tk()
root.title("日期转星期几")
# 创建和放置控件
frame = tk.Frame(root)
frame.pack(pady=20)
label = tk.Label(frame, text="请输入日期 (yyyy-mm-dd):")
label.grid(row=0, column=0, padx=10)
entry = tk.Entry(frame, width=20)
entry.grid(row=0, column=1, padx=10)
button = tk.Button(frame, text="确定", command=calculate_day_of_week)
button.grid(row=0, column=2, padx=10)
result_label = tk.Label(root, text="", font=("Arial", 14))
result_label.pack(pady=20)
# 运行主循环
root.mainloop()
浙公网安备 33010602011771号