废话不多说,直接上代码
import tkinter
import datetime
from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox
#获取今天的日期
today = datetime.date.today()
#判断输入的日期是否合法
def is_date(date):
try:
datetime.datetime.strptime(date,"%Y-%m-%d")
return True
except:
return False
#计算两个日期的差的主函数
def riqichajisuan():
riqi1=u1.get()
riqi2=p1.get()
if is_date(riqi1) and is_date(riqi2):
date1 = datetime.datetime.strptime(riqi1,"%Y-%m-%d")
date2 = datetime.datetime.strptime(riqi2,"%Y-%m-%d")
date_difference=date2-date1
result=date_difference.days
b=messagebox.showinfo('计算结果','这两个日期之间相差:'+ str(result) + '天')
elif riqi1 == '' and riqi2 == '':
sjk=messagebox.showerror('错误','两个日期均未输入或输入格式有误\n请重新输入正确格式的日期!')
elif riqi1 == '' :
c=messagebox.showerror('错误','日期一未输入或输入格式有误\n请重新输入正确格式的日期!')
elif riqi2 == '' :
cqw=messagebox.showerror('错误','日期二未输入或输入格式有误\n请重新输入正确格式的日期!')
else:
a=messagebox.showerror('错误','输入的日期格式有误\n请重新输入正确格式的日期!')
#计算两个日期的差的主窗体
def riqicha():
def tuichu():
top1.destroy()
root2.state('normal')
root2.state('icon')
top1=Toplevel()
top1.title('计算日期差')
top1.resizable(width=False, height=False)
width = 200
heigh = 140
screenwidth = top1.winfo_screenwidth()
screenheight = top1.winfo_screenheight()
top1.geometry('%dx%d+%d+%d'%(width, heigh, (screenwidth-width)/2, (screenheight-heigh)/2 - 70))
tkinter.Label(top1,text='请在下面输入需要计算的日期:').place(width=200,height=30,x=0,y=3)
tkinter.Label(top1,text='格式:年-月-日 如:2022-1-1').place(width=200,height=20,x=0,y=23)
tkinter.Label(top1,text='日期一:').place(x=3,y=43)
tkinter.Label(top1,text='日期二:').place(x=3,y=73)
today = datetime.date.today()
global u1
u1=StringVar()
b=tkinter.Entry(top1,textvariable=u1,width=20).place(x=52,y=43)
global p1
p1=StringVar()
c=tkinter.Entry(top1,textvariable=p1,width=20).place(x=52,y=73)
Button(top1,text='计算',command=riqichajisuan).place(width=60,height=30,x=23,y=101)
Button(top1,text='退出',command=tuichu).place(width=60,height=30,x=117,y=101)
#判断日期属于第几周星期几的计算函数
def panduanxingqi():
riqi=u2.get()
if is_date(riqi):
date = datetime.datetime.strptime(riqi,"%Y-%m-%d")
calendar = datetime.date.isocalendar(date)
result1 = '该日期是{}年第{}周星期{}'.format(calendar[0],calendar[1],calendar[2])
d=messagebox.showinfo('计算结果',result1)
elif riqi == '':
e=messagebox.showerror('错误','未输入任何日期\n请重新输入正确格式的日期!')
else:
f=messagebox.showerror('错误','输入的日期格式有误\n请重新输入正确格式的日期!')
#判断日期属于第几周星期几的主窗体
def panxingqi():
def tuichu():
top2.destroy()
root2.state('normal')
root2.state('icon')
top2=Toplevel()
top2.title('判断星期几')
top2.resizable(width=False, height=False)
width = 200
heigh = 140
screenwidth = top2.winfo_screenwidth()
screenheight = top2.winfo_screenheight()
top2.geometry('%dx%d+%d+%d'%(width, heigh, (screenwidth-width)/2, (screenheight-heigh)/2 - 70))
tkinter.Label(top2,text='请在下面输入需要计算的日期:').place(width=200,height=30,x=0,y=3)
tkinter.Label(top2,text='格式:年-月-日 如:2022-1-1').place(width=200,height=20,x=0,y=23)
tkinter.Label(top2,text='日期:').place(x=3,y=53)
today = datetime.date.today()
global u2
u2=StringVar()
b=tkinter.Entry(top2,textvariable=u2,width=20).place(x=52,y=53)
Button(top2,text='计算',command=panduanxingqi).place(width=60,height=30,x=23,y=101)
Button(top2,text='退出',command=tuichu).place(width=60,height=30,x=117,y=101)
#判断日期是该年的第几天的计算函数
def panduantianshu():
riqi3=u3.get()
if is_date(riqi3):
y,m,d=map(int,riqi3.split("-"))
D=0
days=[31,0,31,30,31,30,31,31,30,31,30,31]
if ((y%400==0)|((y%4==0)&(y%100!=0))):
days[1]=29
else:
days[1]=28
for i in range(m-1):
D=D+days[i]
result2 = "该日期是{}年的第{}天".format(y,D+d)
res=messagebox.showinfo('计算结果',result2)
elif riqi3 == '':
ero=messagebox.showerror('错误','未输入任何日期\n请重新输入正确格式的日期!')
else:
op=messagebox.showerror('错误','输入的日期格式有误\n请重新输入正确格式的日期!')
#判断日期是该年的第几天的主窗体
def pantianshu():
def tuichu():
top3.destroy()
root2.state('normal')
root2.state('icon')
top3=Toplevel()
top3.title('判断第几天')
top3.resizable(width=False, height=False)
width = 200
heigh = 140
screenwidth = top3.winfo_screenwidth()
screenheight = top3.winfo_screenheight()
top3.geometry('%dx%d+%d+%d'%(width, heigh, (screenwidth-width)/2, (screenheight-heigh)/2 - 70))
tkinter.Label(top3,text='请在下面输入需要计算的日期:').place(width=200,height=30,x=0,y=3)
tkinter.Label(top3,text='格式:年-月-日 如:2022-1-1').place(width=200,height=20,x=0,y=23)
tkinter.Label(top3,text='日期:').place(x=3,y=53)
today = datetime.date.today()
global u3
u3=StringVar()
b=tkinter.Entry(top3,textvariable=u3,width=20).place(x=52,y=53)
Button(top3,text='计算',command=panduantianshu).place(width=60,height=30,x=23,y=101)
Button(top3,text='退出',command=tuichu).place(width=60,height=30,x=117,y=101)
#判断用户选择的模式
def panduan():
if v.get()==mode[0]:
a=messagebox.showerror('错误','您没有选择任何功能\n请重新选择!')
if v.get()==mode[1]:
riqicha()
root2.state('icon')
if v.get()==mode[2]:
panxingqi()
root2.state('icon')
if v.get()==mode[3]:
pantianshu()
root2.state('icon')
root2=Tk()
root2.title('日期计算器')
width = 200
heigh = 120
screenwidth = root2.winfo_screenwidth()
screenheight = root2.winfo_screenheight()
root2.geometry('%dx%d+%d+%d'%(width, heigh, (screenwidth-width)/2, (screenheight-heigh)/2 - 70))
tkinter.Label(root2,text='选择你需要的功能:').place(x=50,y=1,width=110,height=30)
mode=("点此选择","计算两个日期的差","判断日期属于第几周星期几","判断日期是该年的第几天")
v = StringVar(root2)
om = OptionMenu(root2,v,*mode).place(width=190,height=30,x=5,y=40)
Button(root2,text="确定",command=panduan).place(width=70,height=30,x=20,y=80)
Button(root2,text="退出",command=root2.destroy).place(width=70,height=30,x=110,y=80)
root2.mainloop()
运行效果: