Le calendrier

Coder un calendrier
Les consignes de base
Qu'est ce qu'est un calendier ?
Je pense que tout le monde sait ce qu'est un calendrier. Cependant, pour être précis, re-définissons ce concept. Un calendrier est un moyen de représentation du temps et de ses composantes principales (jour, semaine...). Cependant, il existe plein de type de calendriers différents. Par exemple, Un calendrier solaire est un calendrier, dont les composantes principales se basent sur la position de la Terre autour du Soleil dans sa révolution. Parmi ces mêmes types de calendrier, chacun découpe différement le déroulement du temps selon le soleil. Celui que nous, occidentaux, utilisons le plus, est le calendrier grégorien. Le calendrier grégorien (nommé d'après le pape Grégoire XIII) est un calendrier solaire dérivé du calendrier julien, le plus utilisé en occident : 1 an représente (environ) une révolution de la Terre autour du soleil et l'an 0 représente l'année de naissance de Jésus-Christ. Historiquement, le calendrier julien (nommé d'après Jules César) est un calendrier solaire, très utilisé dans l'Europe du moyen-âge : 1 an représente (environ) une révolution de la Terre autour du soleil et l'an 0 représente (en gros) l'année de l'élection des derniers consuls (bien que, des fois, d'autres systèmes étaient utilisés). Ici, nous n'allons utiliser que le calendrier moderne et bien connu : le calendrier grégorien.
Maintenant, il ne nous reste plus qu'à parfaitement comprendre ce calendrier, et à trouver un moyen de l'implémenter dans le code. Premièrement, la plus grande période de temps auquelle on aura à faire dans le calendrier grégorien est l'année. Pour être précis, une année représente, dans un calendrier solaire, une période de temps correspondant à une révolution de la Terre autour du soleil. Cette même année est découpée en mois, de durée variable (28, 29, 30 ou 31 jours, selon l'année / le mois). Or, nous avons aussi des unités plus précises, et fixées sur un phénomène naturel, comme le jour. Un jour représente une période de temps correspondant à une rotation de la Terre sur elle même (un cycle jour-nuit). Dans le calendrier grégorien, une année compte généralement 365 jours, mais il est des fois nécessaire d'en rajouter une, car une révolution de la Terre autour du Soleil ne dure pas 365 jours, mais 365.24219 environ. Pour cela, certaines années comportent 366 jours : ce sont les années bissextiles. Les années bissextiles représentent les années multiples de 4, sauf celle multiples de 100 et pas multiple de 400 (donc 1600 et 2000 sont bissextiles, mais pas 1900 ou 1800). Au final, on obtient une année de 365.24216 jours en moyenne, très proche de la réalité.
Ce résultat n'a été obtenu que tardivement dans l'histoire (à cause de la difficulté des calculs), et est l'une des raisons du passage du calendrier julien ou calendrier grégorien. Chaque jour possède une écriture unique, de la forme "Jour/Mois/Année" : cette écriture se nomme une date. Ce même jour peut être découpé en plusieurs unités de temps, donc celle qui nous sera la plus utile est la seconde. Une seconde est une unité de temps, représentant un 86400ème d'un jour terrestre. Nous pouvons aussi la diviser en d'autres unités plus précises : milliseconde, nanoseconde... Dans le code, nous pouvons obtenir un nombre de nanosecondes, correspondant aux nombres de nanosecondes depuis 1970. Tout l'algorithme reposera la dessus. Via ce nombre, on peut donc obtenir le nombre de secondes, de jours... Via le nombre de jours, on peut obtenir le nombre d'années, de mois... Comme ce nombre est relatif à 1970, nous allons devoir y ajouter quelques modifications mathématiques pour obtenir le bon résultat.

Le cahier des charges du calendrier
Ici, beaucoup de façon de faire possibles existent : logiciel, image, site web... Pour des raisons de praticités, nous allons mettre notre calendrier sur une image, sous format "png". C'est probablement la façon la plus simple et modulable de faire, bien qu'elle manque de réactivité dans des applications rapides (logiciels).
Maintenant que les bases sont posées, dressons le cahier des charges :
- Afficher le système temporel du calendrier grégorien
- Permettre un affichage horizontal, semaines après semaines
- Ajouter les évènements basiques