Here it is, forgive the majority being not in english.
from datetime import datetime
import time
import math
#https://ssd.jpl.nasa.gov/horizons.cgi?s_time=1#top
#https://ssd.jpl.nasa.gov/sbdb.cgi
#WolframAlpha
#Wikipedia
import tkinter as tk
root = tk.Tk()
lbl = tk.Label(root, justify=tk.LEFT)
text = tk.StringVar()
lbl["textvariable"] = text
text.set("Test")
lbl.pack()
moduloUnua = ['0']
moduloDua = ['0']
Praviganto1 = 0
Praviganto2 = 30.09
ĈuFaruMonaton = 0
Montru = 5
PliĜustigo = 0
Unikso = None
Komencado = input('Ĉu vi volas komencigi la programon? ')
if Komencado in ('Jes', 'jes', 'okej', 'Okej'):
Loko = input('De kie vi volas vidi la dekuman tempon kaj tagon? ')
if Loko in ('La Tero', 'la tero', 'ltero', 'LTero', 'Ltero', '399', '350'):
JaroGregorie = 1792
MonatoGregorie = 9
TagoGregorie = 22
UTCa_horoj = 0
UTCa_minutoj = 0
UTCa_s = 0
UTCa_ms = 0
Enŝovo = 1
NeenŝovaLongo = 365
UnuaJararaLongo = 4
DuaJararaLongo = 128
MilisekundojPerTagumo = 86400000
PliĜustigo = math.floor(int(input('Kiom da ciferoj post la punkto de la milona tago vi volas? ')))
# https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance
Montru = input('Kiom da linioj vi volas rigardi? ')
if Montru in ('5', 'kvin', 'Kvin', 'KVin', 'KVIn', 'KVIN'):
Montru = 5
if Montru in ('1', 'unu', 'un', 'Unu', 'Un', 'UNu', 'UN', 'UNU'):
Montru = 1
if Montru in ('2', 'du', 'Du', 'DU'):
Montru = 2
if Montru in ('3', 'tri', 'Tri', 'TRi', 'TRI'):
Montru = 3
if Montru == ('4', 'kvar', 'Kvar', 'KVar', 'KVAr', 'KVAR'):
Montru = 4
if Montru == 1:
Kio = input('Ĉu vi volas la kutima aŭ la nekutima linion? ')
else:
Longo = int(input('Ĉu vi volas rigardi la tempon kaj tagon se la tagumo estus malpli longa, pli longa, aŭ kutime longa? Estos (ankaŭ) kutime longa iel. '))
Temploko = int(input('Laŭ kio tempzono la tere vi volas vidi la dekuman tempon kaj tagon? '))
Loko = 'La Tero'
KiamEnŝoviguJaron = 0
JarDekonaLongo = 40
DekaJardekonaLongo = 5
ĈuFaruMonaton = 1
MonataLongo = 30
FinaMonataLongo = 5
Praviganto1 = 27
if Loko in ('La Luno', 'la luno', 'lluno', 'LLuno', 'Lluno', '301'):
Loko = input('Ĉu vi volas rigardi la tempon kaj tagon vere laŭ la luno? ')
if Loko in ('Jes', 'jes', 'okej', 'Okej') or ('Jes', 'jes', 'okej', 'Okej') in Loko:
JaroGregorie = 1792
MonatoGregorie = 9
TagoGregorie = 22
UTCa_horoj = 0
UTCa_minutoj = 0
UTCa_s = 0
UTCa_ms = 0
Enŝovo = 1
NeenŝovaLongo = 365
UnuaJararaLongo = 4
DuaJararaLongo = 128
MilisekundojPerTagumo = 86400000
KiamEnŝoviguJaron = 0
JarDekonaLongo = 40
DekaJardekonaLongo = 5
ĈuFaruMonaton = 1
MonataLongo = 30
FinaMonataLongo = 5
Temploko = int(input('Laŭ kio tempzono la tere vi volas vidi la dekuman tempon kaj tagon? '))
else:
JaroGregorie = 1792
MonatoGregorie = 9
TagoGregorie = 1
UTCa_horoj = 6
UTCa_minutoj = 26
UTCa_s = 0#eble ne
UTCa_ms = 0#eble ne
Enŝovo = 1#?
NeenŝovaLongo = 618#.4136286614534 170 de 411
UnuaJararaLongo = 0#?
DuaJararaLongo = 0#?
MilisekundojPerTagumo = 51028857.792 # 2% de vera tagumo
Temploko = int(input('Laŭ kio tempzono la lune vi volas vidi la dekuman tempon kaj tagon? '))
PliĜustigo = math.floor(int(input('Kiom da ciferoj post la punkto de la centmilona tagumo vi volas? ')))
Montru = input('Kiom da linioj vi volas rigardi? ')
if Montru in ('5', 'kvin', 'Kvin', 'KVin', 'KVIn', 'KVIN'):
Montru = 5
if Montru in ('1', 'unu', 'un', 'Unu', 'Un', 'UNu', 'UN', 'UNU'):
Montru = 1
if Montru in ('2', 'du', 'Du', 'DU'):
Montru = 2
if Montru in ('3', 'tri', 'Tri', 'TRi', 'TRI'):
Montru = 3
if Montru == ('4', 'kvar', 'Kvar', 'KVar', 'KVAr', 'KVAR'):
Montru = 4
if Montru == 1:
Kio = input('Ĉu vi volas la kutima aŭ la nekutima linion? ')
else:
Longo = int(input('Ĉu vi volas rigardi la tempon kaj tagon se la tagumo estus malpli longa, pli longa, aŭ kutime longa? '))
Loko = 'La Luno'
if Loko in ('Marso', 'marso', '499', '450'):
JaroGregorie = 1956
MonatoGregorie = 4
TagoGregorie = 26
UTCa_horoj = 20
UTCa_minutoj = 8
UTCa_s = 46
UTCa_ms = 0
Enŝovo = -1
NeenŝovaLongo = 669
UnuaJararaLongo = 5
moduloUnua = "'1', '3'" # enŝovigas la jaron
DuaJararaLongo = 125
moduloDua = "'0'" # enŝovigas la jaron
MilisekundojPerTagumo = 86400000
PliĜustigo = math.floor(int(input('Kiom da ciferoj post la punkto de la centmilona tagumo vi volas? ')))
Montru = input('Kiom da linioj vi volas rigardi? ')
if Montru in ('5', 'kvin', 'Kvin', 'KVin', 'KVIn', 'KVIN'):
Montru = 5
if Montru in ('1', 'unu', 'un', 'Unu', 'Un', 'UN', 'UNu', 'UNU'):
Montru = 1
if Montru in ('2', 'du', 'Du', 'DU'):
Montru = 2
if Montru in ('3', 'tri', 'Tri', 'TRi', 'TRI'):
Montru = 3
if Montru == ('4', 'kvar', 'Kvar', 'KVar', 'KVAr', 'KVAR'):
Montru = 4
if Montru == 1:
Kio = input('Ĉu vi volas la kutima aŭ la nekutima linion? ')
else:
Longo = int(input('Ĉu vi volas rigardi la tempon kaj tagon se la tagumo estus malpli longa, pli longa, aŭ kutime longa? Estos (ankaŭ) kutime longa iel. '))
Temploko = int(input('Laŭ kio tempzono marse vi volas vidi la dekuman tempon kaj tagon? '))
Loko = 'Marso'
KiamEnŝoviguJaron = 0
JarDekonaLongo = 70
DekaJardekonaLongo = 35
if UnuaJararaLongo > DuaJararaLongo:
UnuaJararaLongo, DuaJararaLongo = DuaJararaLongo, UnuaJararaLongo
if DuaJararaLongo % UnuaJararaLongo == 0:
PlejMalsupraKomunaOblo = DuaJararaLongo
else:
PlejMalsupraKomunaOblo = DuaJararaLongo + 1
AlmenaŭĈiam = 1
while True:
if PlejMalsupraKomunaOblo % UnuaJararaLongo == PlejMalsupraKomunaOblo % DuaJararaLongo == 0:
break
PlejMalsupraKomunaOblo += 1
EnŝovaLongo = Enŝovo + NeenŝovaLongo
TagumojPerUnuaJararo = Enŝovo + UnuaJararaLongo * NeenŝovaLongo
TagumojPerDuaJararo = DuaJararaLongo / UnuaJararaLongo * TagumojPerUnuaJararo - Enŝovo
EpoĥoGregorie = datetime(JaroGregorie, MonatoGregorie, TagoGregorie)
UniksoGregorie = datetime(1970, 1, 1)
Intero = UniksoGregorie - EpoĥoGregorie
TagojInterEpoĥoKajUnikso = Intero.days
Minuss = (UTCa_horoj + UTCa_minutoj + UTCa_s + UTCa_ms) * 1000
msInterEpoĥoKajUnikso = TagojInterEpoĥoKajUnikso * 86400000 - Minuss
TagumojInterEpoĥoKajUnikso = msInterEpoĥoKajUnikso / MilisekundojPerTagumo
def LaTagumero(Komencado, Unikso, Praviganto2, MilisekundojPerTagumo, TagumojInterEpoĥoKajUnikso, TagumojPerUnuaJararo, TagumojPerDuaJararo,
PlejMalsupraKomunaOblo, EnŝovaLongo, NeenŝovaLongo, KiamEnŝoviguJaron, Praviganto1,
JarDekonaLongo, PliĜustigo, DekaJardekonaLongo):
global text
KomplementajTagoj = 5
if Unikso != None:
Dormo = 31
else:
Unikso = time.time() * 1000 - Praviganto2
Tagoj = Unikso / MilisekundojPerTagumo + TagumojInterEpoĥoKajUnikso - Praviganto1 + Temploko * .1
AntaŭUnuaKielero = Tagoj / TagumojPerUnuaJararo
UnuaKielero = math.floor(AntaŭUnuaKielero)
AntaŭDuaKielero = (AntaŭUnuaKielero - UnuaKielero) / TagumojPerDuaJararo * TagumojPerUnuaJararo
DuaKielero = math.floor(AntaŭUnuaKielero)
JarojEnŝovaj = DuaKielero - UnuaKielero
JarojNeenŝovaj = PlejMalsupraKomunaOblo - JarojEnŝovaj
AveraĝaJaro = (JarojEnŝovaj * EnŝovaLongo + JarojNeenŝovaj * NeenŝovaLongo) / PlejMalsupraKomunaOblo
D_1 = Tagoj / AveraĝaJaro
if D_1 < 0:
Jareciganto = -1
else:
Jareciganto = 1
Jaro = math.floor(D_1) + Jareciganto
D_3 = D_1 - Jaro + Jareciganto
JaroDaDuaKielero = str(Jaro % DuaKielero)
JaroDaUnuaKielero = str(Jaro % UnuaKielero)
ĈuEnŝovo = 0
if KiamEnŝoviguJaron == -1: # se aŭ unua aŭ dua veras («OR»)
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = NeenŝovaLongo
if JaroDaUnuaKielero not in (moduloUnua):
KielLongasLaJaro = NeenŝovaLongo
if JaroDaDuaKielero in (moduloDua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaUnuaKielero in (moduloUnua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
Enŝovo = ĈuEnŝovo * EnŝovaLongo
if KiamEnŝoviguJaron == 0: # se unu el du veras («XOR»)
if JaroDaDuaKielero in (moduloDua):
if JaroDaUnuaKielero not in (moduloUnua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaDuaKielero in (moduloDua):
if JaroDaUnuaKielero in (moduloUnua):
KielLongasLaJaro = NeenŝovaLongo
if JaroDaUnuaKielero in (moduloUnua):
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaUnuaKielero not in (moduloUnua):
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = NeenŝovaLongo
Enŝovo = ĈuEnŝovo * EnŝovaLongo
# se la unua el du, aŭ ambaŭ el du, veras
# se la duua el du, aŭ ambaŭ el du, veras
# se ambaŭ el du, aŭ nul el du, veras
LaTagumoj = D_3 * KielLongasLaJaro - Praviganto1
D_4 = LaTagumoj / JarDekonaLongo + 1
JarDekono = math.floor(D_4)
D_5 = D_4 - JarDekono
if JarDekono < 10:
D_6 = D_5 * JarDekonaLongo
if JarDekono > 9:
D_6 = D_5 * (DekaJardekonaLongo + Enŝovo)
TagoDeLaJardekono = math.floor(D_6)
ATagDekono = (D_6 - TagoDeLaJardekono) * 10
TagDekono = math.floor(ATagDekono)
TagMilono = (ATagDekono - TagDekono) * 100
if PliĜustigo < 1:
TagMilono = '{:02.0f}'.format(math.floor(TagMilono))
else:
PliĜustigon = '0{}.{}'.format((PliĜustigo + 3), PliĜustigo)
TagMilono = '{:{}f}'.format(TagMilono, PliĜustigon)
TagMilono = str(TagMilono).replace('.', ',')
if TagoDeLaJardekono == 0:
if JarDekono > 1:
JarDekono -= 1
TagoDeLaJardekono = JarDekonaLongo
if JarDekono == 1:
Jaro -= 1
JarDekono = 10
if KiamEnŝoviguJaron == 0: # se unu el du veras («XOR»)
if JaroDaDuaKielero in (moduloDua):
if JaroDaUnuaKielero not in (moduloUnua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaDuaKielero in (moduloDua):
if JaroDaUnuaKielero in (moduloUnua):
KielLongasLaJaro = NeenŝovaLongo
if JaroDaUnuaKielero in (moduloUnua):
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaUnuaKielero not in (moduloUnua):
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = NeenŝovaLongo
Enŝovo = ĈuEnŝovo * EnŝovaLongo
# se la unua el du, aŭ ambaŭ el du, veras
# se la duua el du, aŭ ambaŭ el du, veras
# se ambaŭ el du, aŭ nul el du, veras
TagoDeLaJardekono = DekaJardekonaLongo + Enŝovo
if JarDekono == 1:
JarDekonoj = 'Unuembro'
elif JarDekono == 2:
JarDekonoj = 'Duembro'
elif JarDekono == 3:
JarDekonoj = 'Triembro'
elif JarDekono == 4:
JarDekonoj = 'Kvarembro'
elif JarDekono == 5:
JarDekonoj = 'Kvinembro'
elif JarDekono == 6:
JarDekonoj = 'Sesembro'
elif JarDekono == 7:
JarDekonoj = 'Sepembro'
elif JarDekono == 8:
JarDekonoj = 'Okembro'
elif JarDekono == 9:
JarDekonoj = 'Naŭembro'
else:
JarDekonoj = 'Dekembro'
if ĈuEnŝovo >= 1:
KomplementajTagoj += Enŝovo
if JarDekono < 10:
if math.floor(LaTagumoj) % 10 == 0:
TagoDeTagDeko = 'Dekdo'
if math.floor(LaTagumoj) % 10 == 1:
TagoDeTagDeko = 'Unudo'
if math.floor(LaTagumoj) % 10 == 2:
TagoDeTagDeko = 'Dudo'
if math.floor(LaTagumoj) % 10 == 3:
TagoDeTagDeko = 'Trido'
if math.floor(LaTagumoj) % 10 == 4:
TagoDeTagDeko = 'Kvardo'
if math.floor(LaTagumoj) % 10 == 5:
TagoDeTagDeko = 'Kvindo'
if math.floor(LaTagumoj) % 10 == 6:
TagoDeTagDeko = 'Sesdo'
if math.floor(LaTagumoj) % 10 == 7:
TagoDeTagDeko = 'Sepdo'
if math.floor(LaTagumoj) % 10 == 8:
TagoDeTagDeko = 'Okdo'
if math.floor(LaTagumoj) % 10 == 9:
TagoDeTagDeko = 'Naŭdo'
else:
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj):
if math.floor(LaTagumoj) % 10 == 0:
TagoDeTagDeko = 'Dekdo'
if math.floor(LaTagumoj) % 10 == 1:
TagoDeTagDeko = 'Unudo'
if math.floor(LaTagumoj) % 10 == 2:
TagoDeTagDeko = 'Dudo'
if math.floor(LaTagumoj) % 10 == 3:
TagoDeTagDeko = 'Trido'
if math.floor(LaTagumoj) % 10 == 4:
TagoDeTagDeko = 'Kvardo'
if math.floor(LaTagumoj) % 10 == 5:
TagoDeTagDeko = 'Kvindo'
if math.floor(LaTagumoj) % 10 == 6:
TagoDeTagDeko = 'Sesdo'
if math.floor(LaTagumoj) % 10 == 7:
TagoDeTagDeko = 'Sepdo'
if math.floor(LaTagumoj) % 10 == 8:
TagoDeTagDeko = 'Okdo'
if math.floor(LaTagumoj) % 10 == 9:
TagoDeTagDeko = 'Naŭdo'
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 1):
TagoDeTagDeko = 'Festo de Virto'
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 2):
TagoDeTagDeko = 'Festo de Genio'
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 3):
TagoDeTagDeko = 'Festo de Laboro'
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 4):
TagoDeTagDeko = 'Festo de Opinio'
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 5):
TagoDeTagDeko = 'Festo de Rekompenco'
if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 6):
TagoDeTagDeko = 'Festo de Libereco/Revolucio'
if Longo == 1 or Longo == -1:
PliLonga = JarDekonaLongo + 10 * Longo
if (math.floor(PliLonga / 10)) * 10 >= (JarDekonaLongo + 5):
PliLonga = (math.ceil(PliLonga / 10)) * 10
if ĈuFaruMonaton != 0:
F_4 = LaTagumoj / MonataLongo + 1
Monato = math.floor(F_4)
F_5 = F_4 - Monato
if Monato < 13:
F_6 = F_5 * MonataLongo
else:
F_6 = F_5 * (FinaMonataLongo + Enŝovo)
M_Tago = math.floor(F_6)
if M_Tago == 0:
if Monato > 1:
Monato -= 1
M_Tago = MonataLongo
if Monato == 1:
Jaro -= 1
Monato = 13
if KiamEnŝoviguJaron == 0: # se unu el du veras («XOR»)
if JaroDaDuaKielero in (moduloDua):
if JaroDaUnuaKielero not in (moduloUnua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaDuaKielero in (moduloDua):
if JaroDaUnuaKielero in (moduloUnua):
KielLongasLaJaro = NeenŝovaLongo
if JaroDaUnuaKielero in (moduloUnua):
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = EnŝovaLongo
ĈuEnŝovo = 1
if JaroDaUnuaKielero not in (moduloUnua):
if JaroDaDuaKielero not in (moduloDua):
KielLongasLaJaro = NeenŝovaLongo
Enŝovo = ĈuEnŝovo * EnŝovaLongo
# se la unua el du, aŭ ambaŭ el du, veras
# se la duua el du, aŭ ambaŭ el du, veras
# se ambaŭ el du, aŭ nul el du, veras
M_Tago = FinaMonataLongo + Enŝovo
if Monato == 1:
Monatoj = 'Vendemiero'
elif Monato == 2:
Monatoj = 'Brumero'
elif Monato == 3:
Monatoj = 'Frimero'
elif Monato == 4:
Monatoj = 'Nivozoo'
elif Monato == 5:
Monatoj = 'Pluviozo'
elif Monato == 6:
Monatoj = 'Ventozo'
elif Monato == 7:
Monatoj = 'Ĝerminalo'
elif Monato == 8:
Monatoj = 'Florealo'
elif Monato == 9:
Monatoj = 'Prerialo'
elif Monato == 10:
Monatoj = 'Mesidoro'
elif Monato == 11:
Monatoj = 'Termidoro'
elif Monato == 12:
Monatoj = 'Fruktidoro'
else:
Monatoj = 'Komplementaj Tagoj'
Jaro = '{:+d}'.format(Jaro)
Templokon = '{:+d}'.format(Temploko)
NulaVico = (' {}, sed ankaŭ {}'.format(Loko, Templokon))
UnuaVico = (' Jar-dekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, TagoDeLaJardekono, JarDekonoj, Jaro, TagDekono, TagMilono))
DuaVico = 'Neniom'
if -1 < Longo < 1:
if ĈuFaruMonaton != 0:
DuaVico = (' Jar-tridekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, M_Tago, Monatoj, Jaro, TagDekono, TagMilono))
#else:
#DuaVico = (' Jar-dekona Kalendaro Usonane: {}, {} {} {} je {},{},{}'.format(TagoDeTagDeko, TagoDeLaSemajno, JarDekonoj, Jaro, Horoj, Minutoj, Sekundoj))
if Longo == 1:
if ĈuFaruMonaton != 0:
DuaVico = (' Jar-dekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, M_Tago, Monatoj, Jaro, AliTagDekono, AliTagMilono))
if Longo == -1:
DuaVico = (' Jar-dekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, M_Tago, Monatoj, Jaro, AliTagDekono, AliTagMilono))
if Montru == 4:
Vortoj = '{}\n\n{}\n{}'.format(NulaVico, UnuaVico, DuaVico)
if Montru == 5:
Vortoj = '{}\n\n{}\n{}\n'.format(NulaVico, UnuaVico, DuaVico)
if Montru == 3:
Vortoj = '{}\n{}\n{}'.format(NulaVico, UnuaVico, DuaVico)
if Montru == 2:
Vortoj = '{}\n{}'.format(UnuaVico, DuaVico)
if Montru == 1:
if -2 < Kio < 2:
Vortoj = '{}'.format(UnuaVico)
else:
Vortoj = '{}'.format(DuaVico)
Dormo = int(30 - Unikso + time.time() * 1000 + Praviganto2)
if Dormo < 0:
Dormo = 0
if Dormo > 30:
Dormo = 30
text.set(Vortoj)
root.after(Dormo, LaTagumero, Komencado, Unikso, Praviganto2, MilisekundojPerTagumo, TagumojInterEpoĥoKajUnikso, TagumojPerUnuaJararo, TagumojPerDuaJararo,
PlejMalsupraKomunaOblo, EnŝovaLongo, NeenŝovaLongo, KiamEnŝoviguJaron, Praviganto1,
JarDekonaLongo, PliĜustigo, DekaJardekonaLongo)
LaTagumero(Komencado, Unikso, Praviganto2, MilisekundojPerTagumo, TagumojInterEpoĥoKajUnikso, TagumojPerUnuaJararo, TagumojPerDuaJararo,
PlejMalsupraKomunaOblo, EnŝovaLongo, NeenŝovaLongo, KiamEnŝoviguJaron, Praviganto1,
JarDekonaLongo, PliĜustigo, DekaJardekonaLongo)
root.mainloop()
I know there are better ways to do the typo-proofing (and probably the other contents), but would like to change that later. It is meant to be a custom (with choices for predefined calendars) multilingual calendar creator eventually. Would kivy or pygame or pyglet be a better choice? I previously used autohotkey and not python for this, but it was very buggy.