[PYTHON] Obtenez un jour de la cérémonie conjointe de Zeller - et du calendrier perpétuel -

À partir de la formule de congruence de Zeller, calculez ce qu'est un jour.

calcal.py


#!/usr/bin/python3
import sys
y = int(sys.argv[1])
m = int(sys.argv[2])
d = int(sys.argv[3])
youbia = ["journée", "Mois", "Feu", "eau", "bois", "Argent", "sol"]

if (m == 1 or m == 2):
    md = m+10
    yd = y-1
else:
    md = m-2
    yd = y

a = yd // 100
b = yd % 100
youbi = (int(2.6*md - 0.2) + d + b + b//4 + a//4 - 2*a)%7

print("UN D", y, "Année", m, "Mois", d, "journée", youbia[youbi], "C'est un jour.",sep="")

Exemple de sortie

$ calcal.py 1967 5 12
Le 12 mai 1967 est vendredi.
$ calcal.py 1994 12 25
Le 25 décembre 1994 est dimanche.
$ calcal.py 1995 12 24
Le 24 décembre 1995 est dimanche.
$ calcal.py 1998 12 24
Le 24 décembre 1998 est jeudi.
$ calcal.py 2000 5 12
Le 12 mai 2000 est vendredi.
$ calcal.py 2019 12 25
Le 25 décembre 2019 est le mercredi.
$ calcal.py 10000 5 12
Le 12 mai 10000 après JC est vendredi.
$ 

Calendrier perpétuel

À propos, c'est un programme qui produit le calendrier perpétuel.

cal.py


#!/usr/bin/python3
import sys
argvs = sys.argv
argc = len( argvs )
months=[31,28,31,30,31,30,31,31,30,31,30,31]
youbia = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

def weekofday(y,m,d):
  md, yd = (m-2, y) if m > 2 else (m+10, y-1)
  a, b = divmod(yd, 100)
  return ( (int(2.6*md - 0.2) + d + b + b//4 + a//4 - 2*a)%7)

def printcal(y,m):
  mm=months[m-1]+(1 if (m==2 and y%4==0 and y%400!=0) else 0)
  print(y,m,sep='/')
  print (*youbia,sep=' ')
  f=weekofday(y,m,1)
  print("    "*f,end='')
  for i in range(1,mm+1):
    print(" %2d " %i,end='')
    if f==6:
      print("")
    f=(f+1)%7
  if f!=0:
    print("")

  
if argc==3:
  y = int(sys.argv[1])
  m = int(sys.argv[2])
else:
  print("Usage : cal.py y m")
  exit(1)
printcal(y,m)


Exemple de sortie

$ cal.py 2020 2
2020/2
Sun Mon Tue Wed Thu Fri Sat
                          1 
  2   3   4   5   6   7   8 
  9  10  11  12  13  14  15 
 16  17  18  19  20  21  22 
 23  24  25  26  27  28  29 
$

Calendrier permanent (2)

cal.py version 2.0 Voici un code qui résume le calcul du jour et le calendrier perpétuel. La fonction de calcul du jour est celle du calcul entier présenté par kkdd. $ ./cal.py y m pour afficher le calendrier de l'année y année m mois. $ ./cal.py y m d affiche le jour de l'année m mois d jour.

cal.py


#!/usr/bin/python3
import sys
argvs = sys.argv
argc = len( argvs )
months=[31,28,31,30,31,30,31,31,30,31,30,31]
youbia = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

def dayofweek(year, month, day):
  m = (month-3)%12
  y = year if month >= 3 else year - 1
  n = day + (13*m+2)//5 + y + y//4 - (y//100) + y//400 + 2
  return (n%7)

def printcal(y,m):
  mm=months[m-1]+(1 if (m==2 and y%4==0 and y%400!=0) else 0)
  print(y,m,sep='/')
  print (*youbia,sep=' ')
  f=dayofweek(y,m,1)
  print("    "*f,end='')
  for i in range(1,mm+1):
    print(" %2d " %i,end='')
    if f==6:
      print("")
    f=(f+1)%7
  if f!=0:
    print("")

if argc==3:
  y = int(sys.argv[1])
  m = int(sys.argv[2])
  printcal(y,m)
elif argc==4:
  y = int(sys.argv[1])
  m = int(sys.argv[2])
  d = int(sys.argv[3])
  f = dayofweek(y,m,d)
  print(y, "/", m, "/", d, " is ", youbia[f],sep="")

else:
  print("Usage : cal.py y m [d]")
  exit(1)

Recommended Posts

Obtenez un jour de la cérémonie conjointe de Zeller - et du calendrier perpétuel -
[Python] Get the day (anglais et japonais)
Obtenez le dernier jour du mois spécifié
Recevez les publications wordpress de la semaine dernière
Récupérer le contenu de git diff depuis python
Découvrez le jour par date / heure
Récupérer le code retour d'un script Python depuis bat
Quel jour achetez-vous de l'argent?
Que faire si vous obtenez `locale.Error: unsupported locale setting` lors de l'obtention de la date du jour en Python
Agréger les appels quotidiens par seconde à partir des journaux du serveur Web en Python