Deux Dates du même jour

Deux Dates du même jour - Java - Programmation

Marsh Posté le 16-11-2006 à 14:05:02    

Bonjour à tous  :hello: ,
Je voudrais vous poser une question concernant la comparaison de deux dates en java.
Je voudrais savoir si deux dates (format YYYY-MM-DD hh:mm:ss) appartiennent au même jour.
Les méthodes getYear() getMonth() et getDay() fonctionnent mais elles marchent également pour deux dates si les deux dates ont 7 jours d'écart (c'est à dire si je compare en somme le 15/11/2006 et le 8/11/2006).
Pourriez-vous m'indiquer une autre méthode ?
 
Merci par avance

Reply

Marsh Posté le 16-11-2006 à 14:05:02   

Reply

Marsh Posté le 16-11-2006 à 14:06:28    

TomZ a écrit :


Les méthodes getYear() getMonth() et getDay() fonctionnent mais elles marchent également pour deux dates si les deux dates ont 7 jours d'écart (c'est à dire si je compare en somme le 15/11/2006 et le 8/11/2006).


 
[:pingouino] ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 16-11-2006 à 14:06:50    

getDay() renvoie le jour de la semaine. C'est getDate() que tu cherches :
http://java.sun.com/j2se/1.4.2/doc [...] #getDate()
 
mais c'est déprécié, donc passe par un Calendar, ca sera mieux.

Reply

Marsh Posté le 16-11-2006 à 14:07:52    

http://java.sun.com/j2se/1.3/docs/ [...] l#getDay()
 
ah oui, logique :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 16-11-2006 à 14:13:30    

sinon, euh...
pkoi ne pas simplement tronquer la date pour ne récupérer que yyyy-mm-dd et comparer si elles sont égales ?
 
sinon, une simple conversion en entier de l'objet date OLE (si java n'est pas trop pourri ça doit exister) te permettra d'isoler la partie "date" de ton objet.
donc tu pourras faire l'égalité sans problème.
 
la dernière solution, même si elle semble un peu sale, est la plus propre et la plus performante, puisque tu bosses directement avec la représentation physique de la date (la plupart des plateformes utilisent la représentation OLE pour les dates), sans avoir à faire des traîtements complexes
 
en gros, en .NET ça donne ça :
 
Code :

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace ConsoleApplication1
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             DateTime dte1 = DateTime.Now;
  11.             DateTime dte2 = DateTime.Now.AddHours(4);
  12.             Console.WriteLine("Date 1 : " + dte1.ToString());
  13.             Console.WriteLine("Date 2 : " + dte2.ToString());
  14.             Console.WriteLine("OLE Date 1 : " + dte1.ToOADate().ToString());
  15.             Console.WriteLine("OLE Date 2 : " + dte2.ToOADate().ToString());
  16.             Console.WriteLine("INT OLE Date 1 : " + ((int)dte1.ToOADate()).ToString());
  17.             Console.WriteLine("INT OLE Date 2 : " + ((int)dte2.ToOADate()).ToString());
  18.             Console.WriteLine("Date 1 == Date 2 : " + (dte1 == dte2).ToString());
  19.             Console.WriteLine("OLE Date 1 == OLE Date 2 : " + (dte1.ToOADate() == dte2.ToOADate()).ToString());
  20.             Console.WriteLine("INT OLE Date 1 == INT OLE Date 2 : " + ((int)dte1.ToOADate() == (int)dte2.ToOADate()).ToString());
  21.             Console.ReadKey();
  22.         }
  23.     }
  24. }


 
Sortie :


Date 1 : 11/16/2006 2:22:52 PM
Date 2 : 11/16/2006 6:22:52 PM
OLE Date 1 : 39037.5992162153
OLE Date 2 : 39037.7658828819
INT OLE Date 1 : 39037
INT OLE Date 2 : 39037
Date 1 == Date 2 : False
OLE Date 1 == OLE Date 2 : False
INT OLE Date 1 == INT OLE Date 2 : True

Message cité 1 fois
Message édité par MagicBuzz le 16-11-2006 à 14:24:55
Reply

Marsh Posté le 16-11-2006 à 14:16:42    

mais nan :fou:

Reply

Marsh Posté le 16-11-2006 à 14:17:15    

MagicBuzz a écrit :


sinon, une simple conversion en entier de l'objet date (si java n'est pas trop pourri ça doit marcher) te permettra d'isoler la partie "date" de ton objet.
donc tu pourras faire l'égalité sans problème.


 
 [:rotflmao]  [:vomi]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 16-11-2006 à 14:18:50    

[:pingouino]

Reply

Marsh Posté le 16-11-2006 à 14:25:33    

http://forum-images.hardware.fr/themes_static/images_forum/1/flag1.gif
 
edit : pour être constructif, jakarta.apache.org/commons propose un CommonsLang avec DateUtils.isSameDay()


Message édité par brisssou le 16-11-2006 à 14:28:20

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 16-11-2006 à 14:26:02    

désolé, mais ça marche parfaitement, et c'est infiniment moins lourd que faire successivement des getdate() et autres 25 fois de suite pour finir avec 50 tests d'égalité :spamafote:
 
quand au format OLE pour les dates, c'est le format natif pour la plupart des plateformes, même Linux a laissé tombé le timestamp d'unix si je ne m'abuse
 
-- hé bé... je viens de jeter un oeil à la doc java... qu'est-ce que c'et pauvre comme langage... même les libs natives du C permettent de gérer les dates mieux que ça :sweat: --


Message édité par MagicBuzz le 16-11-2006 à 14:46:38
Reply

Marsh Posté le 16-11-2006 à 14:26:02   

Reply

Marsh Posté le 16-11-2006 à 14:31:18    

getDate() impec merci

Reply

Marsh Posté le 16-11-2006 à 15:10:39    

Avec Class GregorianCalendar c'est encore mieux c'est pas deprecated :)

Reply

Marsh Posté le 16-11-2006 à 15:12:33    

sinon pour etre plus constructif que le pingouino que j'ai poste, pour les dates en Java, Joda Time roxor [:dawa]

Reply

Marsh Posté le 16-11-2006 à 15:16:52    

Calendar à la place de GregorianCalendar


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 17-11-2006 à 01:05:18    

joda-time, evidemment :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 24-11-2006 à 08:45:38    

tiens le .NET ça me rappelle une situation olé-olé ou j'ai dû me farcir tout le code source pour changer toutes les gestions de dates qui foiraient après une migration d'un server avec locale européenne vers américaine, 9/11 c'est bien le 11 septembre non ?


---------------
The Rom's, à votre service
Reply

Marsh Posté le 24-11-2006 à 11:57:45    

31/12/2006 = français et anglais
12/31/2006 = américain
 
en fait, c'est ça le plus chiant. parceque quand t'as que la locale générique "en", tu sais pas comment interpréter les dates :D
 
le mieux étant de travailler sous un des formats suivants :
 
int64 : format UNIX (millisecondes depuis chais plus quand)
float : format Microsoft/OLE (partie entière : nb jours depuis le 01/01/0001 et partie décimale = faction du jour)
YYYYMMDD H24:MI:SS : Format ISO chais plus combien, reconnu en natif par la plupart des SGBD et langages.
YYYY-MM-DD H24:MI:SS : format ISO chais plus combien, utilisé par le XML.
DD.MM.YYYY : format allemand, avec les "." comme séparateur, les dates ne peuvent être formatées que dans ce sens, donc pas de confusion possible.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed