COMMENT SAVOIR QUEL JOUR ÉTAIT-ON À UNE TELLE DATE?

cs_Kmleon Messages postés 2 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 18 février 2006 - 18 févr. 2006 à 14:17
Karkanas Messages postés 2 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 9 avril 2014 - 4 déc. 2012 à 15:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36120-comment-savoir-quel-jour-etait-on-a-une-telle-date

Karkanas Messages postés 2 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 9 avril 2014
4 déc. 2012 à 15:36
Bonjour,

Je viens tout juste de consulter cet article, et aussi de m'inscrire.

Tout d'abord merci pour le post, je programme en Java mais les formules mathématiques restant bonnes quelque soit le langage, cela m'a bien aidé !!

KHIMI : Une année bissextiles c'est, (une année divisible par 4 ET NON par 100 OU une année divisible par 400).
khimi Messages postés 4 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 14 mai 2012
14 mai 2012 à 11:24
Je sais que cela fait un moment que ce code a été déposé, cependant je tiens à signaler que l'algorithme de calcul ne fonctionne pas correctement.
Il y un une erreur sur les années bissextiles, précisément sur les dates du 31 Janvier et du 1er Février qui retournent exactement le même numéro de jour.

J'ai testé avec les dates du 31/01/2012 et du 01/02/2012, et le calcul retourne le chiffre 3.
Voici comment j'ai résolu ce problème ( j'ai fait quelques tests afin de vérifier son exactitude, cependant il se peut qu'il soit lui aussi incorrect ) :

// Petite macro permettant de savoir si l'année est bissextile ou non, les années bissextiles doivent être divisibles par 4 et non divisible par 100
#define isLeapYear( year ) ( ( year % 4 == 0 ) && ( year % 100 != 0 ) )

Ensuite il suffit de modifier légèrement la macro g afin quelle prenne en compte les années bissextiles,
pour le mois de février des années bissextiles, il ne faut pas ajouter 13 mais 8 :
#define g( year, month ) ( month < 3 ? ( isLeapYear( year ) && month > 1 ? month + 8 : month + 13 ) : month + 1 )

En espérant vous avoir aidé.
bennoua34 Messages postés 1 Date d'inscription jeudi 29 avril 2010 Statut Membre Dernière intervention 21 mai 2010
21 mai 2010 à 23:25
Super beau travail!
tekila_bandita Messages postés 248 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 15 mars 2007 33
24 févr. 2006 à 13:04
Eh bien en faite, si on s'y attarde un peu je pense que l'on pourrait reussir a simplifier la formule, mais moi je l'ai trouver en tant qu'exercice d'application dans mon livre sur le C, alors je l'ai appliqué...
Dans l'exercice, il montre une formule que si on l'applique à deux dates et que l'on effectue la différence des resultats obtenus, alors on obtient, d'une maniere simple, le nombre de jours d'ecart entre ces deux dates...
Dans un exercice juste en dessous, il nous dise que si l'on reprend le resultat de ce calcul appliqué à une date, qu'on lui soustrait 621049 et qu'on garde le reste de ce resultat divisé par 7, on obtient un chiffre compris entre 0 et 6 indiquant le jour de la semaine (Le lundi étant le premier jour de la semaine, il se voit donc affecter la valeur 1, donc dimanche et 0 vu qu'il n'y a pas de valeur 7...)...

Je ne peus pas plus vous expliqué, mais si un jour je m'attarde sur cette formule, alors je vous ferait part des details du calcul...
En tout cas, merci pour vos notes ! :D ;)
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
18 févr. 2006 à 15:12
Moi je fais comme ça :

int Julien(int Day, int Month, int Year)
{
int J;
J = 367*Year-7*(Year+(Month+9)/12)/4-3*((Year+(Month-9)/7)/100+1)/4+275*Month/9+Day+1721029;
J++;
return J;
}

int FindDay(char* MyDate)
{
char *Day[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
int J = Julien(MyDate->Day, MyDate->Month, MyDate->Year);

strcpy(MyDate, Day[J%7]);
return J%7;
}
cs_Kmleon Messages postés 2 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 18 février 2006
18 févr. 2006 à 14:17
Dans un script, j'avais justement besoin de ce genre de formule. Donc merci beaucoup.
Par contre, je ne comprend rien à la formule :-/ Si quelqu'un a petite explication ....
Rejoignez-nous