je sais pas exactement comment ca marche pour le ntfs, mais quand on parle de l'année et qu'on prend une valeur tronquée du resultat, là ya grosse différence entre 1.99.. et 2 !!
je sais pas exactement comment ca marche pour le ntfs, mais quand on parle de l'année et qu'on prend une valeur tronquée du resultat, là ya grosse différence entre 1.99.. et 2 !!
Il nous le dit comment ça marche exactement, et maintenant, avec un petit calcul, tu verras que rien que 4611686018427387904 ça représente déja une année dans le genre 16000 et des poussières... autant dire avec certitude, une année qui ne sera jamais utilisée.Envoyé par dway
tu pense au musée un peu ??
de toute facon je pense que dway s'en fout totalement puisque tu lui a deja donnée la soluce avec la div 64/32 bits !
pour le calandar dway, ca marche ou pas ?? dway tu dors ?
ps meme avec des années plus basses on peu avoir en resultat 1.99 ou 2, en fin bon j'di plu rien !
bon dev'
nan , et toi t'as trouvé qq chose ?Envoyé par TangiX
ben... ta vu mon post sur la similitude avec les conversions de base ?? t'as essayé ??
1.999999999999999999783159 au lieu de 2, ça fait une erreur de 0,000000000000000000216841 unités, soit dans notre cas, une erreur de 21,6 empto-secondes (10e-27) ou encore 0,0216841 yocto-secondes (10e-24), car apparemment empto n'est pas officiel. Enfin bref, rien de très significatif, même pour les jeux olympiques, mais moi non plus je dis plus rienEnvoyé par TangiX
et si l'algo ne prend que la partie entiere ?? ... bon d'accord jdi plus rien promis
ben ça ferait des erreurs de 1, soit 100 nano-secondes, soit 0,1 micro-secondes. Même ça, moi je dis que c'est pas très important pour la date et l'heure de création d'un fichier
attention la division permet de connaitre le nb d'année !
donc le resultat correspont a un nombre d'année et 1 année ca fait gros comme erreur
T'as vu ça où ? Moi j'avais compris que la division permettait de transformer le nombre de 100ns en nombre de secondes, soit diviser par 10 000 000.Envoyé par TangiX
ca :
c'est la reponse a ca ? :Envoyé par TangiX
Envoyé par dway
si oui, j'ai rien compris !
bon d'acord g jammais ete fais pour etre prof moi
bon je vais reassaye en plus clair... et plus long
donc ce cher pape Gregoire XIII en 1582, ben il en avais super marre que les jours soit completement decalé dans l'année, donc il a sauté plein de jour et a crée le calandrier Gregorien
Dans son calendrier, les année bissextiles sont tous les quatres ans
(multiple de 4)
mais la ca fait encore un decalage donc tous les multiples de 100, ne sont pas bissextiles ! mais la encores ca ne suffit pas donc tous les multiples de 400 sont bissextiles !
1600 2000 et 2400 sont des multiples de 400 donc ils sont bissextiles
1700 1800 1900 2100 2200 2300 sont des mutiples de 100 et donc ne sont pas bissextiles
Les autres multiples de 4 sont bissextiles !
ainsi il existe un cycle de 400ans
On peut ainsi voir qu'une période de 400 ans a un nombre fixe de jours donc de ns, on peut considerer 400 ans comme etant le rang le plus haut d'une conversion
si l'on demarre le 1/1/1601, ca n'est pas par hazard, 1600 etait une année spéciale, le fait de la placé à la finde la période de 400ans (2000 pour la premiere periode) permet de decouper la periode de 400ans
Les trois première période de 100ans ont le meme nb du jour...
la quatriemme est un peu plus longue (1 jour) mais ne peut etre compté car sinon ont aurait une periode de 400ans entiere (deja eliminé au rang precedent !)
les siecles sont donc notre deuxieme rang
viennet ensuite les periode 4 ans (24+1) rang 3
puis les périodes de 1 an (3 +1) rang 4
en additionnant ces 4 rang à 1601, tu a ton année, le reste te permet de trouver moi,jour,heures,min,sec...
(pour les moi je pensai a un tableau (a voir qd tu auras fais les années))
j'espère avoire ete plus clair
sinon a bientot
bon dev'
Il doit y avoir un moyen d'utiliser deux divisions successives 64/32 = 32 de manière à avoir un reste suffisement petit cad < 32bits. Le reste doit être inférieur à 2^32 donc la minute parait approprié, puisque si l'unité est 100ns on a la minute égale à 60*1000*1000*10 est a peu près 8 fois inférieur à 2^32. Ce qui laisserait au quotient qui doit aussi être inférieur à 2^32, 2^32 minutes soit 8000 années, donc la formule marcherait jusqu'a 9600 ap JC donc, c'est covnenable. Par cette formule tu as déjà séparé les minutes du reste, donc ca peut être interessant, ensuite tu peux faire les divisions sur les deux nombres obtenus.
On a grand interet à utiliser les divisions euclidiennes pour déterminer la date. Imagine qu'on parte de l'an 0. Tu es à l'an 983. Tu veux savoir combien de jour il y a eu depuis cette année. Tu as donc théoriquement, 365 jours par an donc d'une première approximation il y a eu 983 * 365 jours. Mais il faut aussi rajouter les années bissextiles, donc on rajoute le quotient entier de 983/ 4. Et puis on va enlever aussi le quotient entier de 983 / 100 et rajouter le quotient entier de 983/400
NbJours = 983 * 365 + 983/4 - 983/100 + 983/400
généralisé en :
NbJours = x * 365 + x/4 - x/100 + x/400
Dans notre cas, NbJours nous le connaissons, puisque c'est le nombre de minutes précédement déterminé divisé par 60*24, et nous voulons trouver x. Cela dit, ce sont des divisions euclidienes, et je n'ai pas réussi à résoudre l'équation, et je n'ai plus le temps là. Cela dit, ce qui n'aurait pas de raisons de marcher, semble marcher cad, faire la division euclidienne suivante :
x = (NbJours * 400) / (365*400 + 100 - 4 + 1)
On pourrait essayer de démontrer à partir de cette formule que c'est vrai, m'enfin là j'ai pas le temps. Par ailleur si vos années commence à 1601 il y a un problème, puisque ma formule part de l'an 0, qui a les même propriétés que l'an 1600 et pas 1601, donc il faudrait ajouter 365 (c'est ca le nombre de jour d'une année au fait ??) et ajouter 1600 à la fin pour avoir la vraie année. Cela dit, je crois qu'il y une erreur, qui ne se verra qu'a partir de l'an 2000, il faut que je revoie ca, là je n'ai pas le temps.
Cela dit, la méthode précédente semble être plus simple, celle là n'a que l'avantage de ne demander qu'une multiplication et une division.
ok merci les gars pour vos explications, mais si vous pouviez faire la démo avec un exemple, je pigerais peut etre mieux ...
1C3BE624D981EFBh ca doit donner qq chose comme 09/12/03...
comment j'me prend la gueule ...
bon g fait cette conversion en esperant que tu comprenne mais je n'ai pa la meme date que toi (j'espere que ta fait expré!!):
- 1C3BE624D981EFBh ca doit donner qq chose comme 09/12/03...
1s = 1 000 000 000 ns = 10 000 000 : 00 00 00 00 00 98 96 80
1min = 60 s = 600 000 000 : 00 00 00 00 23 C3 46 00
1h = 60 min = 36 000 000 000 : 00 00 00 08 61 C4 68 00
1j = 24h = 864 000 000 000 : 00 00 00 C9 2A 69 C0 00
28j = 24 192 000 000 000 : 00 00 16 00 A3 91 00 00 F
29j = 25 056 000 000 000 : 00 00 16 C9 CD FA C0 00 F
30j = 25 920 000 000 000 : 00 00 17 92 F8 64 80 00 A,J,S,N
31j = 26 784 000 000 000 : 00 00 18 5C 22 CE 40 00 J,M,M,J,A,O,D
1a = 365j = 315 360 000 000 000 : 00 01 1E D1 78 C6 C0 00
1ab = 366j = 316 224 000 000 000 : 00 01 1F 9A A3 30 80 00
4a/b = 3a + 1ab = 1 262 304 000 000 000 : 00 04 7C 0F 0D 84 C0 00
100a = 24*4a/b + 4a = 31 556 736 000 000 000 : 00 70 1C AF 27 8D 00 00
400a = 3*100a + 25*4a/b = 126 227 808 000 000 000 : 01 C0 73 85 C8 9D C0 00
année (division euclydienne):
01 C3 BE 62 4D 98 1E FB / 01 C0 73 85 C8 9D C0 00 = 1;r=00 03 4A DC 84 FA 5E FB
00 03 4A DC 84 FA 5E FB / 00 70 1C AF 27 8D 00 00 = 0;r=00 03 4A DC 84 FA 5E FB
00 03 4A DC 84 FA 5E FB / 00 04 7C 0F 0D 84 C0 00 = 0;r=00 03 4A DC 84 FA 5E FB
00 03 4A DC 84 FA 5E FB / 00 01 1E D1 78 C6 C0 00 = 2;r=00 01 0D 39 93 6C DE FB
année = 1601+1*400+0*100+0*4+2*1=2003
année non bissextile donc fevrier=28j
mois (technique pas génial!)
J: cmp 00 01 0D 39 93 6C DE FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 F4 DD 70 9E 9E FB
F: cmp 00 00 F4 DD 70 9E 9E FB, 00 00 16 00 A3 91 00 00 : >0 r= 00 00 DE DC CD 0D 9E FB
M: cmp 00 00 DE DC CD 0D 9E FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 C6 80 AA 3F 5E FB
A: cmp 00 00 C6 80 AA 3F 5E FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 AE ED B1 DA DE FB
M: cmp 00 00 AE ED B1 DA DE FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 96 91 8F 0C 9E FB
J: cmp 00 00 96 91 8F 0C 9E FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 7E FE 96 A8 1E FB
J: cmp 00 00 7E FE 96 A8 1E FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 66 A2 73 D9 DE FB
A: cmp 00 00 66 A2 73 D9 DE FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 4E 46 51 0B 9E FB
S: cmp 00 00 4E 46 51 0B 9E FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 36 B3 58 A7 1E FB
O: cmp 00 00 36 B3 58 A7 1E FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 1E 57 35 D8 DE FB
N: cmp 00 00 1E 57 35 D8 DE FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 06 C4 3D 74 5E FB
D: cmp 00 00 06 C4 3D 74 5E FB, 00 00 18 5C 22 CE 40 00 : <0 m=12 reste identique
Jour (Division euclydienne)
00 00 06 C4 3D 74 5E FB / 00 00 00 C9 2A 69 C0 00 = 8;r= 00 00 00 7B 1A 26 5E FB
J=8
Date: 8 decembre 2003
Heure (Division Euclydienne)
00 00 00 7B 1A 26 5E FB / 00 00 00 08 61 C4 68 00 =14;r= 00 00 00 05 C1 68 AE FB
h=14
Minutes (division...)
00 00 00 05 C1 68 AE FB / 00 00 00 00 23 C3 46 00 =41;r= 00 00 00 00 07 22 78 FB
m=41
Secondes(division simple)
00 00 00 00 07 22 78 FB / 00 00 00 00 00 98 96 80 = 11,9699707
Conclusion: 1C3BE624D981EFBh correspond à 8/12/2003-14h41m11,9699707secondes
bon dev'
Oops j'ai fait une faute dans mon post
La date est bien le 9 décembre et non le 8!
la dvision pour trouver le jour peut donner 0 or le 0 decembre n'existe pa ! il faut donc incrementer le jour et la date est bonne
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager