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 :

Date obtenue avec TimeStamp


Sujet :

Android

  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut Date obtenue avec TimeStamp
    Bonjour,

    Je récupère avec SQL le timestamp actuel: unix_timestamp(current_timestamp).

    Je souhaite le convertir en date:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("DATE", String.valueOf(new Date(timestamp)));
    Ce log m'affiche le 12 janvier 1970, sachant que mon timestamp affiché est 1336591414 (à savoir le 9 mai 2012)

    Comment ça se fait?
    Merci

  2. #2
    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
    unix_timestamp renvoit des secondes
    Date() prend en paramètre des millisecondes...

    Juste une question ... pourquoi utiliser unix_timestamp ?

  3. #3
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci! C'est la seule solution que j'ai trouvée... cf. http://www.developpez.net/forums/d12...amp-emulateur/

    En bref, le timestamp renvoyé par le système et converti en secondes n'était jamais le même que le timestamp SQL, donc je me suis dit autant me fier à ce dernier, qu'à celui du dispositif (s'il est mal réglé par exemple).

  4. #4
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Et rebelotte... en multipliant par 1000 j'ai une date tout aussi incohérente (11 janvier 1970). Mais qu'est ce qui cloche avec mon Eclipse?

    J'ai bien 1336591414 qui s'affiche, qui correspond à 9 mai 2012 (ici)
    Je multiplie par 1000, et j'ai 11 janvier 1970 sur mon mobile.

    Quel peut être le problème?
    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    J'ai testé ce que tu dis mais cela fonctionne bien de mon côté avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		long time = 1336591414000L;
     
    		Date date = new Date(time);
     
    		java.sql.Date date2 = new java.sql.Date(time);
     
    		Calendar cal = new GregorianCalendar();
    		cal.setTimeInMillis(time);
    date, date2 ou cal sont tous à la bonne date.

    Est-tu sûr de ta variable d'entrée ? C'est bien un long et non un int ?

  6. #6
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Yeah c'était le long et pas int !

    Merci !

  7. #7
    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
    Citation Envoyé par Anduriel Voir le message
    En bref, le timestamp renvoyé par le système et converti en secondes n'était jamais le même que le timestamp SQL, donc je me suis dit autant me fier à ce dernier, qu'à celui du dispositif (s'il est mal réglé par exemple).
    Là, ca veut dire qu'il nous manque des informations...

    Coté device/java:
    * JAVA: System.currentTimeMillis(); (long, milliseconds GMT)
    * JAVA: new Date() (Date, GMT)
    * JAVA: Calendar.getinstance() (Calendar, TZ independant)
    * SQLLITE: date('now') (TIMESTAMP TZ dependant)
    * UNIX: timestamp (int, seconds GMT)

    Renvoient tous la même date: celle actuelle du système (attention toutefois aux locales pour certaines).

    Quelle est la problématique exacte ?

  8. #8
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Ca fait beaucoup de choses tout ça!

    Je souhaite récupérer la date à laquelle l'utilisateur exécute une certaine action, et l'insérer dans une base SQL. Dans la base SQL, avec mes connaissances, je trouve ça beaucoup plus simple d'ajouter le timestamp (quitte à reconvertir dernière en date).

    Dans un sens device -> SQL j'avais récupéré le CurrentTimeMillis(), et j'avais eu des problèmes (peut être du fait que j'avais utilisé int et non long), donc j'ai adopté un UNIX_TIMESTAMP(CURRENT_TIMESTAMP) côté requête SQL.

    Dans l'autre sens SQL -> device, je veux reconvertir ce timestamp en date. J'avais comment par un getInt (JSON) et un date(timestamp) qui plantait, mais maintenant le getLong semble fonctionner.

    J'espère avoir été plus clair.

  9. #9
    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
    En fait ca dépend de la base... SQL n'est qu'un langage de formalisation de requêtes....

    Oracle: sysdate
    MySQL: now(), sysdate(), ...

    par exemple sous oracle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update MY_TABLE set MY_DATE=SYSDATE where ID=?;
    select sysdate from dual;
    sous mysql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update MY_TABLE set MY_DATE=SYSDATE() where ID=?
    select sysdate();
    sous SQLite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update MY_TABLE set MY_DATE=date('now') where ID=?
    select date('now');

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

Discussions similaires

  1. [Criteria] Comparer une Date et un Timestamp avec Criteria
    Par VinceCBA dans le forum Hibernate
    Réponses: 1
    Dernier message: 22/01/2013, 10h05
  2. Date avec timestamp
    Par saraza dans le forum Langage
    Réponses: 2
    Dernier message: 26/11/2008, 00h04
  3. Réponses: 2
    Dernier message: 08/05/2008, 12h36
  4. [MySQL] Tri par date avec timestamp
    Par shutdown76 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/01/2007, 02h37
  5. [Dates] Format date avec timestamp
    Par otagun dans le forum Langage
    Réponses: 11
    Dernier message: 27/05/2006, 15h16

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