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

Java Discussion :

time.before ne marche pas


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut time.before ne marche pas
    Bonjour
    je récupère un objet Time a partir de la base de données de cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Time timeEnd = rs.getTime("DateFin");
    Et je le compare avec un objet qui représente le temps actuel initialisé de cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Time now = new Time(today.getTime());
    J'essaye de vérifier si le timeEnd n'est pas encore atteint, j'utilise la methode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean ret =  now.before(timeEnd);
    Mais la fonction before ne retourne pas le bon résultat !!!
    Pourriez vous m'indiquer mon erreur ?
    PS:
    * Time est du package java.sql
    * Le type du champ DateFin dans la bd est datetime (car j'ai besoin aussi de la date de fin) et l'enregistrement est sous forme DD-MM-YYYY HH:MM:SS

    merci pour votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    affiche ca, juste avant ton test, pour voir avec quelles données tu travaille réellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("comparing db time: " +timeEnd+ " and now "+ now);

  3. #3
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("comparing db time: " +timeEnd+ " and now "+ now);
    ça donne exactement les temps que je veux tester..Je faisais deja mes verifications de valeurs avec le debugage (sur netbeans).
    A mon avis le probleme vient du format (12h/24h) de l'heure ! Le problème apparait dans le cas où timeEnd = 19:00:00 et par exemple now = 12:14:00

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les dates n'ont pas de formatage interne ni de timezone, c'est juste un long. Si elles s'affichent correctement, y a aps de raison que before / after soit incohérent.

  5. #5
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    Voici un teste que je viens de faire :
    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
    import java.sql.Time;
    public class Main 
    {
        public static void main(String[] args) throws Exception
        {
            Time now = new Time(new java.util.Date().getTime());
            Time t = new Time(0,0,0);
            while(true)
            {
                System.out.println("t="+t);
                System.out.println("now="+now);
                t.setTime(t.getTime()+1000);
                System.out.println("t.before(now) = "+t.before(now));
            }
        }
    }
    Et voici un bout du résultats de sortie :
    ...
    t=18:40:07
    now=18:40:13
    t.before(now) = true
    t=18:40:08
    now=18:40:13
    t.before(now) = true
    t=18:40:09
    now=18:40:13
    t.before(now) = true
    t=18:40:10
    now=18:40:13
    t.before(now) = true
    t=18:40:11
    now=18:40:13
    t.before(now) = true
    t=18:40:12
    now=18:40:13
    t.before(now) = true
    t=18:40:13
    now=18:40:13
    t.before(now) = true
    t=18:40:14
    now=18:40:13
    t.before(now) = true
    t=18:40:15
    now=18:40:13
    t.before(now) = true
    t=18:40:16
    now=18:40:13
    t.before(now) = true
    ...
    ça m'etonne !!!

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Time now = new Time(new java.util.Date().getTime());
    now vaut "maintenant".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Time t = new Time(0,0,0);
            t.setTime(t.getTime()+1000);
    t vaut "premier janvier 1970 et des poussières"

    De plus, il est clairement indiqué dans la javadoc que le constructeur Time(int,int,int) est déprécié et que tu devrais utiliser Time(long).

    Time hérite de Date, et la méthode before() se trouve dans Date. Donc la comparaison va utiliser le moment depuis le 1er janvie 1970 comme critère de comparaison. est l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.getTime()<now.getTime()
    en pratique, tu devrais pouvoir utiliser t.before et t.after à condition que tes deux objets soient bien des Time sql donc les données de jour / mois / année ne sont pas présentes.

Discussions similaires

  1. time out ca marche pas
    Par homomorphisme dans le forum C#
    Réponses: 8
    Dernier message: 23/06/2008, 17h16
  2. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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