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

Android Discussion :

timestamp.gettime() & string date


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut timestamp.gettime() & string date
    Hello!

    Mon problème:
    -> passer de "Mardi 16 Octobre 2012" à 1350382221552
    -> et vice versa

    Dans un sens ça tourne bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static String timeStamp2date (long ts)
    {
    java.text.SimpleDateFormat formatter = new SimpleDateFormat("EEEE dd MMMM yyyy");
    return formatter.format(ts); 
    }
    -> mon 1350382221552 ressort bien en "Mardi 16 Octobre 2012"

    De l'autre coté je râme!!
    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
     
    public static long date2timeStamp2(String date)
    	{
    		SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE dd MMMM yyyy");
    		java.util.Date parsedDate;
    		java.sql.Timestamp tS=null;
    		try 
    		{
    			parsedDate = dateFormat.parse(date);
    			tS = new java.sql.Timestamp(parsedDate.getTime());
    		} 
    		catch (ParseException e) 
    		{
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//return tS.getTime()/1000;
    		return tS.getTime();
    	}
    -> mon "Mardi 16 Octobre 2012" ressort en 1350338400000 au lieu du 1350382221552 initial

    Où me suis-je gourré?

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Essaie simplement ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static long date2timeStamp2(String date)
    	{
    		SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE dd MMMM yyyy");
                    try{
    		      return dateFormat.parse(date).getTime();
                    } catch (ParseException e) {
                    //catch de l'erreur
                    }
                    return 0l;
    	}

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Conseil de vieux programmeur tout moisi qui s'est planté 238984 fois....

    Quand tu as une date, garde une date !
    C'est à dire, ne jamais avoir en paramètre (ou en retour) un "long" qui est en fait un "java.util.Date", mais bien un "java.util.Date"...

    Quand il faut passer par un string (appel web ou autre), utiliser un format "connu" et fixe (genre W3C: "YYYY/MM/DD'T'HH:mm:ss.SSS'Z'" en UTC)

    Quand il faut l'afficher à l'utilisateur, utiliser les fonctions systèmes.



    1350382221552 n'est pas tout à fait "Mardi 16 Octobre 2012", mais "Mardi 16 Octobre 2012 à 12h10 et 21s" (et 552 millisecondes)
    1350338400000 c'est "Mardi 16 Octobre 2012 à 0:0:0.0000"

    Donc tout est logique....

    {edit} Le "timestamp" unix, c'est la même chose sans les millisecondes.... plus aucun intérêt donc (remonte à la grande époque des 16/32 bits)

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Oui, tout à fait d'accord avec toi, sur le principe.

    Sauf que là 2 choses:
    -> Sqlite ne gère visiblement pas de format date "natif"
    -> et qu'on m'a donc demandé de gérer ça moi-même avec des timestamps... ce qui à mes yeux n'a pas d'intérêt du tout, surtout que j'avais déjà tout fait avec des string et que ce n'est que pour gérer un cache de liste d'affichage, cache à durée limitée donc!

    Durée de vie limité, qq pouièmes d'octets en plus d'utilisés sur la sd card certes, est ce vraiment dramatique??

    Mais ce que boss veut...............................

    Bref, étant donné que ma liste d'affichage n'indique que le jour, et pas l'heure, ça devrait coller quand même...

    Merci pour vos réponses en tout cas!

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Haaa non mais sqlite faut stocker un long oui c'est sur... L'interêt majeur étant de filtrer facile (betwen 2 dates), et d'orderer facile (vive les anglicismes)

    Timestamp par contre ... java.sql.Timestamp (et java.sql.Date) sont des extensions de java.util.Date sensées gérer automatiquement les transformation en string lors de l'insertion directe en base de donnée.... Donc dans tous les cas, le retour est un java.util.Date.... et on n'utilse ces classes que pour leurs fonction #toString() et #parse()

    Perso j'ai fait un 'wrapper' autour de SQLite qui me permet de récupérer des java.util.Date d'un cursor, mais surtout, de les insérer et à chaque fois c'est en passant par des "long".

    Mais encore une fois, la transformation vers/depuis un long ne se fait qu'au dernier moment parcequ'on a pas le choix.
    Comme pour l'affichage, c'est juste quand on le met à l'écran qu'on fait la traduction en String.
    Dans tout le code c'est un java.util.Date, afin de bien profiter de notre langage fortement typé adoré.
    Sinon, c'est la galère pour gérer les changements d'heure (été/hiver/timezone), et même de format d'affichage (même pour un langage, sur android, on peut choisir d'afficher les dates différemment).

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Merkiiiiiiiii!

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

Discussions similaires

  1. [SQL] un champ Timestamp ou deux champs Date et Heure?
    Par davmaster62 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/02/2006, 23h04
  2. Problème String/Date
    Par plasticgoat dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 20/12/2005, 10h56
  3. Remplir un timestamp avec un string ?
    Par nadass dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2005, 23h54
  4. [JDBC] String => Date Oracle
    Par mr.t dans le forum JDBC
    Réponses: 22
    Dernier message: 16/02/2005, 18h51
  5. [date en string] -> [date en s]
    Par meufeu dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/07/2004, 13h40

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