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()
posted @ 2025-03-09 22:35  混沌武士丞  阅读(9)  评论(0)    收藏  举报