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

Services Web Java Discussion :

Conversion d'une date


Sujet :

Services Web Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Conversion d'une date
    Bonjour,

    Je suis en train de développer une petite application Android pour moi. Mon opérateur (je suis en prépaiement) ne met pas à disposition une application. Je veux simplement développer une appli pour avoir les infos utiles (crédit restant, volume de données internet restant, etc...). J'ai remarqué qu'il mettait des webservices à disposition.

    J'ai un problème dans la conversion des nombres.

    Sur le navigateur, j'ai les info suivants pour internet (elles sont correctes) :
    volume restant : 143.00 MB
    Valable à partir du : 04.06.2014
    Valable jusqu'au 04.08.2014
    Renouvellement automatique : actif

    En JSON, cela me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"AutoRenew":true,"Balance":149946368,"DateEnd":"\/Date(1407119352000)\/","DateStart":"\/Date(1401905804000)\/"}
    AutoRenew : true
    Balance : 149946368
    DateEnd : "/Date(1407119352000)/"
    DateStart : "/Date(1401905804000)/"

    Comment puis-je convertir les dates ? J'imagine que c'est un format numérique avec la date et les heures, minutes, secondes. Pouvez-vous m'aider svp ?
    Pour la balance, c'est ok. La notation antérieure à 1998 est utilisée soit 1 Mo = 2^20 octets, ce qui vaut 1 048 576 octets.Il suffit de faire 149 946 368 / 1 048 576 pour arriver à 143 MB.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Ton fournisseur n'a pas une documentation de son webservice ? Car le format de date ne me parait pas standard. J'ai pensé au timestamp unix (nombre de millisecondes écoulées depuis le 1er janvier 1970) mais ça ne colle pas. ça se trouve c'est un format maison... (genre nombre de millisecondes depuis le 1er janvier 2000).

    Romain.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Sur un autre forum, on m'a dit que la date était de type long. J'ai pu résoudre mon problème grâce à cela. De plus, le format ci-dessous serait le résultat d'une fonction native de ASP.NET pour serializer les dates en JSON, mais cela reste à confirmer.

    La réponse HTTP me renvoie le code JSON suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"AutoRenew":true,"Balance":149946368,"DateEnd":"\/Date(1407119352000)\/","DateStart":"\/Date(1401905804000)\/"}
    "input" correspond au code JSON ci-dessus. Voici comment je deserialize et traite la date.
    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
     
                     JSONObject obj = new JSONObject(input);
    	         String endDate = obj.getString("DateEnd");
     
    	         // ==> /Date(1407119352000)/
    	         // On conserve le contenu entre paranthèse pour le transformer en type "long"
    	         StringTokenizer st = new StringTokenizer(endDate, "()");
    	         List<Object> list = new ArrayList<Object>();
     
    		 	 while (st.hasMoreElements()) {
    		 		list.add(st.nextElement());
    		 	 }
     
    		 	 String temp = (String)list.get(1);
    		 	 long dateToConvert = Long.parseLong(temp);
     
    			 Format format = new SimpleDateFormat("dd.MM.yyyy à HH:mm");
    		     String dateToPrint = format.format(dateToConvert);
    	         this.collection.put("endDate", dateToPrint);
    Comme la date (dateToConvert) est uniquement destinée à l'affichage sur l'écran Android, je me suis permis de la laisser en String. "this.collection" est de type Map<String, Object>.
    Je lis la date comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                //End Date
                StringBuilder sb2 = new StringBuilder();
                sb2.append("Echéance : ").append(collection.get("endDate"));
     
                TextView endDate = (TextView)findViewById(R.id.EndDate);
                endDate.setText(sb2.toString());
    Cela affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Le fuseau horaire n'a pas été géré. Il est possible qu'il y a un décalage d'1 ou 2 heures
    Echéance : 04.08.2014 à 04:29
    Le code ci-dessus fonctionne, mais je pense que l'on peut faire bcp plus simple (j'ai l'impression que c'est un peu la méthode char d'assaut pour tuer une mouche).

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par rg77140 Voir le message
    J'ai pensé au timestamp unix (nombre de millisecondes écoulées depuis le 1er janvier 1970) mais ça ne colle pas. ça se trouve c'est un format maison... (genre nombre de millisecondes depuis le 1er janvier 2000).

    Romain.
    T'as du mal calculer, parce que ça colle

    Citation Envoyé par Swissboy Voir le message
    Sur un autre forum, on m'a dit que la date était de type long.
    C'est le nombre de millisecondes depuis EPOCH

    Citation Envoyé par Swissboy Voir le message
    Le code ci-dessus fonctionne, mais je pense que l'on peut faire bcp plus simple (j'ai l'impression que c'est un peu la méthode char d'assaut pour tuer une mouche).
    effectivement, beaucoup plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	         String endDate = obj.getString("DateEnd");
                     endDate = endDate.replaceAll("[^0-9]", "");// on vire ce qui n'est pas chiffres
    	 	 Date end= new Date(Long.parseLong(endDate));
    	         this.collection.put("endDate", end);

Discussions similaires

  1. Conversion d'une date non standard en TDateTime ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 2
    Dernier message: 27/12/2006, 08h37
  2. conversion d'une date en chaine de caracteres
    Par salmer dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/10/2006, 16h31
  3. [C#] Conversion d'une date
    Par Jos dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/02/2006, 16h50
  4. Conversion d'une date jj/mm/aaaa en N°sem
    Par GD67 dans le forum Access
    Réponses: 2
    Dernier message: 16/11/2005, 09h02
  5. [date] conversion d'une date et compatibilité access
    Par WriteLN dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/01/2005, 14h03

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