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

Collection et Stream Java Discussion :

transformer des objets Date et Integer


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut transformer des objets Date et Integer
    bonour,

    Voila, j'essais de faire une transformation par très pratique (mais c'est la spec qui est comme ca). Voila dans une base de données je dois stocker des dates sous forme d'entier. Dans mon programme je dois pouvoir afficher ces dates.

    Ca je crois que j'y arrive. Avec le constructeur Date(long n); il devrait me créer la date voulu a partir de mon numero récuperer dans ma base de données.

    Mon problème est le sense inverse. Comment a partir d'une string je peux vérifier que c'est une date (reponse dans la FAQ) mais comment ensuite transformer cette date en Integer?? je n'ai pas reussi a trouver de méthode..

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Date.getTime() te retourne exactement le même long que tu passes au constructeur (nombre de millisecondes depuis 01/01/1970 00:00 GMT.

    Bonne chance.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Ok merci mais cette fonction me donne un type long. Et j'ai besoin d'un integer.

    Alors j'ai essayé la chose suivante :
    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
     
    public static Integer saisieDate(){
    		BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
    		String saisie = null;
    		Integer entier;
    		try{
    			saisie = flux.readLine();
    			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    			Date d = sdf.parse(saisie);
    			entier = new Integer(d.getTime().intValue());
    		}
    		catch(Exception e){
    			System.out.println("Erreur lecture de flux"+e);
    		}
    		return entier;
    	}
    Mais ca me donne une erreure de compilation qui est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Fairy:src sophie$ javac MyDate.java 
    MyDate.java:16: long cannot be dereferenced
                            entier = new Integer(d.getTime().intValue());
                                                  ^
    1 error
    c'est pour ca que je posais la question. si on methode faisant directement la conversion existait. ou bien peut etre tu sais comment faire compiler cette fonction ?

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bah s'ils ont choisi de passer par un long, c'est pour une bonne raison: un int ne suffit pas à stocker une date complète:

    Une représentation minimale:
    mois (1-12) 4 bits
    jours (1-31) 5 bits
    heures (0-23) 5 bits
    minutes (0-59) 6 bits
    secondes (0-59) 6 bits
    ------------------------------------
    On est déjà à 26 bits, reste plus que 8 bits pour l'année
    années: à partir de 1900, si c'est sur 8 bits, Date stockera au max 2^8-1 = 255 càd 2155 ...or c'est faux: Date peut aller plus loin.

    C'est pour ça qu'on utilise le long.
    Maitenant, tu peux bien sur faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int x = (int) d.getTime();
    Mais à tes risques ...
    Sinon, si tu travailles seulement sur les date par exemple, et pas de temps, tu peux faire ton propre et simple encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //encodage Date-->int
    Date d;
    int y = d.getDate() + (d.getMonth() << 8) + (d.getYear() << 16);
     
    //décodage int-->Date
    int day = y & 0x000000FF;
    int month = (y >> 8) & 0x000000FF;
    int year = (y >> 16);
    Voilou. Bonne chance.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Merci pour ton aide. Je vais attendre la rentrée pour passer les champs en long et pouvoir utiliser correctement les fonctions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer une date en integer dans le tMap Talend.
    Par seb1972 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 24/01/2013, 12h03
  2. Réponses: 0
    Dernier message: 22/04/2010, 10h02
  3. [XI R2] Condition sur des objets "date-heure"
    Par bastoonet dans le forum Deski
    Réponses: 2
    Dernier message: 09/09/2008, 17h21
  4. Ajouter des jours à un objet Date
    Par lity7 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/11/2007, 15h40
  5. Réponses: 1
    Dernier message: 05/07/2007, 14h48

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