from datetime import date, timedelta, datetime
from tkinter import *
from tkinter import ttk
def julian_to_gregorian(j_date):
year = j_date.year
if year <= 1582:
diff = 10
elif year <= 1700:
diff = 10
elif year <= 1800:
diff = 11
elif year <= 1900:
diff = 12
elif year <= 2100:
diff = 13
else:
diff = 14
return j_date + timedelta(days=diff)
def gregorian_to_julian(g_date):
year = g_date.year
if year <= 1582:
diff = 10
elif year <= 1700:
diff = 10
elif year <= 1800:
diff = 11
elif year <= 1900:
diff = 12
elif year <= 2100:
diff = 13
else:
diff = 14
return g_date - timedelta(days=diff)
class AppConverter:
def __init__(self):
self.root = Tk()
self.janela()
self.frames_da_janela()
self.widgets_frame1()
self.menus()
self.root.mainloop()
def janela(self):
self.root.title("Conversor Juliano ↔ Gregoriano")
self.root.configure(background='#1e3743')
self.root.geometry("500x300")
self.root.resizable(False, False)
def frames_da_janela(self):
self.frame_1 = Frame(self.root, bd=4, bg='#dfe3ee',
highlightbackground='#759fe6', highlightthickness=2)
self.frame_1.place(relx=0.02, rely=0.02, relwidth=0.96, relheight=0.96)
def widgets_frame1(self):
self.abas = ttk.Notebook(self.frame_1)
self.Conversor_Juliano_Gregoriano = Frame(self.abas, background="#dfe3ee")
self.Conversor_Gregoriano_Juliano = Frame(self.abas, background="#dfe3ee")
self.abas.add(self.Conversor_Juliano_Gregoriano, text="Juliano → Gregoriano")
self.abas.add(self.Conversor_Gregoriano_Juliano, text="Gregoriano → Juliano")
self.abas.place(relx=0, rely=0, relwidth=0.98, relheight=0.98)
# --- JULIANO → GREGORIANO ---
self.data1 = StringVar()
self.resultado_gre = StringVar()
Label(self.Conversor_Juliano_Gregoriano, text="Data Juliana (dd/mm/aaaa):", bg='#dfe3ee', fg='#107db2',
font=("Arial", 14, "bold")).place(relx=0.05, rely=0.05)
Entry(self.Conversor_Juliano_Gregoriano, textvariable=self.data1, justify='center',
font=("Arial", 14)).place(relx=0.05, rely=0.15, relwidth=0.9)
Button(self.Conversor_Juliano_Gregoriano, text="Converter", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=self.calcular_juliano_para_gregoriano).\
place(relx=0.3, rely=0.45, relwidth=0.45, relheight=0.2)
Label(self.Conversor_Juliano_Gregoriano, text="Data Gregoriana:", bg='#dfe3ee', fg='#107db2',
font=("Arial", 14, "bold")).place(relx=0.05, rely=0.73)
Label(self.Conversor_Juliano_Gregoriano, textvariable=self.resultado_gre,
font=("Arial", 14, "bold"), bg="#dfe3ee").place(relx=0.45, rely=0.73, relwidth=0.45)
# --- GREGORIANO → JULIANO ---
self.data2 = StringVar()
self.resultado_jul = StringVar()
Label(self.Conversor_Gregoriano_Juliano, text="Data Gregoriana (dd/mm/aaaa):", bg='#dfe3ee', fg='#107db2',
font=("Arial", 14, "bold")).place(relx=0.05, rely=0.05)
Entry(self.Conversor_Gregoriano_Juliano, textvariable=self.data2, justify='center',
font=("Arial", 14)).place(relx=0.05, rely=0.15, relwidth=0.9)
Button(self.Conversor_Gregoriano_Juliano, text="Converter", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.calcular_gregoriano_para_juliano).place(relx=0.3, rely=0.45, relwidth=0.45, relheight=0.2)
Label(self.Conversor_Gregoriano_Juliano, text="Data Juliana:", bg='#dfe3ee', fg='#107db2',
font=("Arial", 14, "bold")).place(relx=0.05, rely=0.73)
Label(self.Conversor_Gregoriano_Juliano, textvariable=self.resultado_jul,
font=("Arial", 14, "bold"), bg="#dfe3ee").place(relx=0.45, rely=0.73, relwidth=0.45)
# --- Funções de cálculo ---
def calcular_juliano_para_gregoriano(self):
try:
data = datetime.strptime(self.data1.get(), "%d/%m/%Y").date()
resultado = julian_to_gregorian(data)
self.resultado_gre.set(resultado.strftime("%d/%m/%Y"))
except Exception:
self.resultado_gre.set("Erro na data")
def calcular_gregoriano_para_juliano(self):
try:
data = datetime.strptime(self.data2.get(), "%d/%m/%Y").date()
resultado = gregorian_to_julian(data)
self.resultado_jul.set(resultado.strftime("%d/%m/%Y"))
except Exception:
self.resultado_jul.set("Erro na data")
def quit(self):
self.root.destroy()
def menus(self):
menubar = Menu(self.root)
self.root.config(menu=menubar)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Opções", menu=filemenu)
filemenu.add_command(label="Sair", command=self.quit)
AppConverter()