IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Soucis de Date


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 172
    Points : 70
    Points
    70
    Par défaut Soucis de Date
    Bonjour à tous

    Je vous écrit après avoir tenté d'obtenir la durée restante entre une Date de début et une Date de fin...

    Il y a un décalage que je n'arrive pas à m'expliquer...
    les valeurs en entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    > debut : Wed Dec 04 15:49:39 UTC+01:00 2013
    > Date actuelle : Mon Dec 02 17:24:00 UTC+01:00 2013
    Le code utilisé: avec mExpiration : la date de fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DateFormat timeFormat = new SimpleDateFormat("dd'j' HH'h' mm'm'",
    				Locale.FRANCE);
    Date tempsRestant = new Date(mExpiration.getTime()
    				- System.currentTimeMillis());
    LogUtils.LOGI("Mission.java", ">> tempsRestant : " + tempsRestant);
    Le problème et que cela me retourne 2j 23h et des... soit 3 jours

    J'avoue être dépassé car le calcul est extrêmement simple et utilise des methodes fournies par java...

    Je ne suis pas à l'aise avec les Date mais la...quelqu'un peut il m'aider?
    D'avance merci

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Salut,

    Je pense que ceci devrait t'intéresser peut être http://www.developpez.net/forums/d11...e-entre-dates/
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'erreur que tu fais, c'est de formater une durée avec un format de date !

    En effet, la différence en millisecondes de tes deux dates, données en exemple, est égale à un nombre de millisecondes qui correspond à cette date :

    Friday Jan 02 22:25:39 1970 Coordinated Universal Time
    d'où ta durée de 2 jours et 22 heures et 25 minutes.

    Mais une durée n'est pas une date.

    Petit exemple :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class DateDiff {
     
    	public final static DateFormat FORMAT = new SimpleDateFormat("EEEE MMM dd HH:mm:ss yyyy zzzz", Locale.US);
     
    	private enum Duree {
    		JOUR(1000*60*60*24),
    		HEURE(1000*60*60),
    		MINUTE(1000*60),
    		SECONDE(1000);
    		private long nbMillis;
     
    		Duree(long nbMillis) {
    			this.nbMillis=nbMillis;
    		}
     
    		public long getNbMillis() {
    			return nbMillis;
    		}
     
    	}
     
    	public static void main(String[] args) {
     
    		try {
    			Date debut = FORMAT.parse("Wed Dec 04 15:49:39 2013 UTC+01:00");
    			Date actuelle = FORMAT.parse("Mon Dec 02 17:24:00 2013 UTC+01:00");
    			System.out.println("Debut "+debut);
    			System.out.println("Actuelle "+actuelle);
    			long dif=debut.getTime()-actuelle.getTime();
    			System.out.println("Erreur de confusion (ceci n'est pas le temps entre les 2 dates) : " + new SimpleDateFormat("dd'j' HH'h' mm'm'",
    					Locale.FRANCE).format(new Date(dif))); // erreur confusion date et durée
    			for( Duree duree : Duree.values()) {
    				int valDuree = (int)(dif/duree.getNbMillis()); 
    				dif-=valDuree*duree.getNbMillis();
    				System.out.println(duree+"(s) = "+valDuree);
    			}
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 172
    Points : 70
    Points
    70
    Par défaut
    merci pour vos réponse

    @joel.drigo : j'ai aussi essayé de garder la durée en millisecondes mais le resultat etait le même aprés formattage :s

    EDIT : je regarde ton code mais j'etudiais l'option joda-time?

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par Gob59 Voir le message
    @joel.drigo : j'ai aussi essayé de garder la durée en millisecondes mais le resultat etait le même aprés formattage :s
    Oui c'est un peu normal puisqu'une durée ne se formate pas.

    Citation Envoyé par Gob59 Voir le message
    EDIT : je regarde ton code mais j'etudiais l'option joda-time?
    Bonne idée si tu veux pouvoir présenter une durée correctement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par thelvin Voir le message
    Oui c'est un peu normal puisqu'une durée ne se formate pas.
    On peut formater une durée... mais pas avec un DateFormat qui est fait pour formater des dates !


    a++

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 172
    Points : 70
    Points
    70
    Par défaut
    Alors j'ai essayé joda-time la durée est correcte
    MAIS il s'entête à ne pas m'afficher les jours et me renvoi :

    0j 29h 30m...

    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Duration duration = new Duration(tempsRestant); // in milliseconds
    		Period p = duration.toPeriod(PeriodType.yearDayTime());
    		PeriodFormatter formatter = new PeriodFormatterBuilder()
    				.printZeroAlways().appendDays().appendSuffix("j ")
    				.appendHours().appendSuffix("h ").appendMinutes()
    				.appendSuffix("m")
    				.toFormatter();
    
    		String formatted = formatter.print(duration.toPeriod());
    		
    		return formatted;
    J'ai rajouté la ligne bleue par la suite mais rien y fait...
    J'ai beau parcourir la doc, je ne comprends pas pourquoi il ne veut pas m'interpreter les jours au dela de 24h...

    une idée?

  8. #8
    Membre habitué Avatar de dev_2007
    Profil pro
    Inscrit en
    Août 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 98
    Points : 138
    Points
    138
    Par défaut
    Je te conseille de passer par la librairie Joda qui gère efficacement les dates y compris la différence entre deux dates données.

    Voici le lien vers l'API : http://joda-time.sourceforge.net/api...LocalDate.html

    Courage

    Voici un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays()
    En passant par des LocalDate.

    Donc tu n'as convertir tes dates d'entrées en LocalDate puis les passes à la méthode Days.daysBetween(param1, param2).getDays()
    Cordialement,
    HEL
    __________________
    Tout d'abord le faire fonctionner , Ensuite qu'il soit rapide. Enfin le rendre agréable à utiliser.

Discussions similaires

  1. Petit souci avec dates
    Par santacrus dans le forum VBA Access
    Réponses: 9
    Dernier message: 11/10/2009, 08h06
  2. Enorme soucis champ date
    Par schventdavid dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 08/07/2009, 14h25
  3. [MySQL] Petit soucis convertion date lors d'insertion
    Par obito dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/02/2009, 15h48
  4. [XI R2] soucis de dates
    Par Elias Farks dans le forum Webi
    Réponses: 10
    Dernier message: 27/02/2009, 11h19
  5. soucis de date lié au parametrage
    Par tof5962 dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/03/2008, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo