Skip to content

Instantly share code, notes, and snippets.

@Mara-Li
Created February 2, 2026 06:14
Show Gist options
  • Select an option

  • Save Mara-Li/9ff2900e39b40866a8423e71fa99a545 to your computer and use it in GitHub Desktop.

Select an option

Save Mara-Li/9ff2900e39b40866a8423e71fa99a545 to your computer and use it in GitHub Desktop.
import argparse
import datetime
import random
import sys
import re
def convert_date_format(format):
"""
Convertit un format de date en format python.
Parameters
----------
format : str
Le format de date à convertir.
Returns
-------
str:
Le format de date python.
"""
if "%" in format:
return format
print("Conversion du format de la date")
format = format.lower()
format = re.sub(r"d+", "%d", format)
format = re.sub(r"m+", "%m", format)
format = re.sub(r"y+", "%Y", format)
return format
def birthday(year=None, age=None, mode="numeric", format=None, saison=None):
"""
Génère une date d'anniversaire aléatoirement.
Parameters
----------
year : int
L'année à utiliser.
age : int
L'âge à utiliser (en années).
mode : str
Le mode de génération, numerique ou full.
Returns
-------
str:
The birthday.
"""
month_name = [
"Janvier",
"Février",
"Mars",
"Avril",
"Mai",
"Juin",
"Juillet",
"Aout",
"Septembre",
"Octobre",
"Novembre",
"Décembre",
]
day_name = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
saison_name = {
"hiver": [1, 2, 12],
"printemps": [3, 4, 5],
"été": [6, 7, 8],
"automne": [9, 10, 11],
}
if year and age:
year = year - age
elif age:
year = datetime.datetime.now().year - age
month_nb = random.randint(1, 12)
if saison:
saison = saison.lower()
if saison in saison_name:
month_nb = random.choice(saison_name[saison])
if (
year
and month_nb == 2
and (year % 4 == 0 and year % 100 != 0 or year % 400 == 0)
):
day_nb = random.randint(1, 29)
elif month_nb in [1, 3, 5, 7, 8, 10, 12]:
day_nb = random.randint(1, 31)
elif month_nb in [4, 6, 9, 11]:
day_nb = random.randint(1, 30)
else:
day_nb = random.randint(1, 28)
if mode == "full":
if year:
day_convert = day_name[
datetime.datetime(year, month_nb, day_nb).isoweekday() - 1
]
else:
day_convert = day_name[random.randint(0, 6)]
if day_nb == 1:
day_convert = day_convert + "er"
day_final = f"{day_convert} {day_nb} {month_name[month_nb]}"
else:
if month_nb < 10:
month_nb = f"0{month_nb}"
day_final = f"{day_nb}/{month_nb}"
if year and mode == "full":
day_final = f"{day_final} {year}"
elif year:
day_final = f"{day_final}/{year}"
if format:
# use datetime format
# validation of format
format = convert_date_format(format)
day_final = datetime.datetime.strptime(day_final, "%d/%m/%Y").strftime(format)
return day_final
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Génère une date d'anniversaire aléatoire."
)
parser.add_argument("-y", "--year", type=int, help="L'année à utiliser.")
parser.add_argument(
"-a",
"--age",
type=int,
help="L'âge, si on veut générer une année. (Par défaut, l'année actuelle sera utilisée.)",
)
parser.add_argument(
"-m",
"--mode",
type=str,
choices=["numeric", "full"],
default="numeric",
help="Le mode d'affichage de la date. Full: Affiche avec le jour de la semaine, le nom du mois et l'année. Numeric: Affiche uniquement le jour et le mois (en nombre).",
)
parser.add_argument(
"-f", "--format", type=str, help="Le format de la date. Par défaut, DD/MM/YYYY."
)
parser.add_argument(
"-s",
"--saison",
type=str,
choices=[
"Hiver",
"Printemps",
"Été",
"Automne",
"hiver",
"printemps",
"été",
"automne",
"ete",
"Eté",
],
help="La saison à utiliser.",
)
args = parser.parse_args()
print(
"La date d'anniversaire est le",
birthday(
year=args.year,
age=args.age,
mode=args.mode,
format=args.format,
saison=args.saison,
),
)
sys.exit(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment