Bonjour,
Comment savoir le nombre de jours entre deux date:
exp : 2006-05-01 et 2006-08-15
et merci
Bonjour,
Comment savoir le nombre de jours entre deux date:
exp : 2006-05-01 et 2006-08-15
et merci
A priori, ça devrait marcher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public class Boby { private long CONST_DURATION_OF_DAY = 1000l * 60 * 60 * 24; public Boby() { // 2006-05-01 Calendar calendar1 = new GregorianCalendar(); calendar1.set(Calendar.YEAR, 2006); calendar1.set(Calendar.MONTH, 4); calendar1.set(Calendar.DAY_OF_MONTH, 1); Date date1 = calendar1.getTime(); // 2006-08-15 Calendar calendar2 = new GregorianCalendar(); calendar2.set(Calendar.YEAR, 2006); calendar2.set(Calendar.MONTH, 8); calendar2.set(Calendar.DAY_OF_MONTH, 15); Date date2 = calendar2.getTime(); // Différence long diff = Math.abs(date2.getTime() - date1.getTime()); long numberOfDay = (long)diff/CONST_DURATION_OF_DAY; System.err.println("Le nombre de jour est : " + numberOfDay); } public static void main(String[] args) { new Boby(); } }
Ca ça marche sûr (avec gestion heure d'été/heure d'hiver) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public static double getDaysBetweenDates(Date theEarlierDate, Date theLaterDate) { double result = Double.POSITIVE_INFINITY; if (theEarlierDate != null && theLaterDate != null) { final long MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24; Calendar aCal = Calendar.getInstance(); aCal.setTime(theEarlierDate); long aFromOffset = aCal.get(Calendar.DST_OFFSET); aCal.setTime(theLaterDate); long aToOffset = aCal.get(Calendar.DST_OFFSET); long aDayDiffInMili = (theLaterDate.getTime() + aToOffset) - (theEarlierDate.getTime() + aFromOffset); result = ((double) aDayDiffInMili / MILLISECONDS_PER_DAY); } return result; }
Et pourquoi pas faire directement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 final long MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24; long delta = d2.getTime() - d1.getTime(); return delta / (MILLISECONDS_PER_DAY);
Juste pour l'histoire je sais que tout les jours n'ont pas la même durée car parfois le dernier jour de l'année est plus de une seconde ou un truc du genre, mais bon cela ne doit pas trop influencer le resultat.
Style le 31 decembre 2005 qui a eut une seconde supplementaire.
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Donc le code de natha ne marche pas non plus ?
Je ne le savais pas. Merci pour l'infoStyle le 31 decembre 2005 qui a eut une seconde supplementaire.![]()
Pourtant ils en ont parle dans les journeaux televise dans les journees precedents le nouvel an. La seconde de compensation a ete introduite au niveau des horloges atomiques puis repercutee sur les ordis et machines connectees via NTP en cascade.
Si je me souviens bien des reportages, les date ou ces secondes de compensation sont inserees (comme celle evoquee ici) ne font pas partie d'un algorithme specifique au calendrier gregorien mais sont arbitrairement choisies par l'organisme international qui gere le temps (sais plus son nom). L'un des intervenants avait par ailleurs indique que cette compensation aurait du normalement avoir lieu qq annees auparavant mais elle avait ete retardee pour x raisons diverses.
A priori non en effet le code peut ne pas fonctionner (enfin si on veut un resultat sur a 100%), ni les classes Calendar/Date d'ailleurs (sauf patch ulterieur). Mais bon apres il faut voir si sur des longues periodes ca ne compense pas une limitation du calendrier gregorien et si au final on ne retombe pas sur ses pattes.
Voir :
http://fr.wikipedia.org/wiki/Seconde_additionnelle
http://fr.wikinews.org/wiki/Une_seconde_intercalaire_ajout%C3%A9e_au_31_d%C3%A9cembre_2005
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Ici le probleme demandé en le nombre de jours donc on peut supposer que le degre de precision n'est pas la seconde.
Donc je pense que ma solution est amplement suffissante. (il faut bien trouver une justification).
Je vais aller lire tes liens sur wikipédia![]()
merci.
A priori ça marche... m'enfin c'est pas moi qui ait fait cette méthode alors je garanti rien.Envoyé par gronono
Ca marche globalement, mais tu ne tiens pas de la seconde qui s'ajoute de temps en temps.
Bien sur que c'est à java.
L'ecart ne doit être enorme entre la réalité et le resultat.
En même temps... le nombre de jour(s) entre deux dates au format jj-mm-aaaa étant au moins de 1.
Une seconde ramenée à la journée représente :
1 / 86400 = 1,1574074074074074074074074074074e-5
Autant dire rien du tout....
Du coup , ce delta est plus que négligeable et les solutions "simples" comme
doivent être largement suffisantes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 long diff = Math.abs(date2.getTime() - date1.getTime()); long numberOfDay = (long)diff/CONST_DURATION_OF_DAY;
Partager