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 :

Lecture d'une date dans un format étrange


Sujet :

Java

  1. #1
    lr
    lr est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Par défaut Lecture d'une date dans un format étrange
    Salut,

    J'ai une date au format
    39987.46944

    Quand je la colle dans OpenOffice Calc et que je formatte la cellule en date, j'arrive à obtenir
    23.06.2009 11:16:00

    ce qui est correct.

    Comment faire la même chose en java ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    hello,
    ba là c'est pas vraiment une question de Java, la question c'est plutôt d'où tu copies la date ? c'est quoi ce format ?

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 243
    Par défaut
    c'est quoi ce format ?
    A vérifier en recalculant, mais c'est tout simplement la représentation numérique classique d'une Date, la forme sous laquelle elle est stockée et avec laquelle tout système travaille.

    Il s'agit normalement du nombre de jour depuis la date 0, la date 0 étant codifiée comme étant le 30/12/1899 00:00: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 : 45
    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
    Citation Envoyé par sevyc64 Voir le message
    A vérifier en recalculant, mais c'est tout simplement la représentation numérique classique d'une Date, la forme sous laquelle elle est stockée et avec laquelle tout système travaille.
    Sauf que "tout système" travaille habituellement en nombre de millisecondes secondes depuis epoch.

    A tenter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new Date(chiffre*24*60*60*1000)
    Edit: en calculant à la mano la partie h mm ss, il semble que ce soit ça

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 243
    Par défaut
    Sauf que "tout système" travaille habituellement en nombre de millisecondes secondes.
    Je n'ai pas dit le contraire, la partie décimale du nombre correspond aux heures, minutes, secondes, millisecondes si nécessaire

  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 : 45
    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
    je voulais juste dire que d'habitude on stocke ca dans un long, pas dans un float

  7. #7
    lr
    lr est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Par défaut
    Merci pour vos réponses.

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String tmpDate = "39987.46944";
    Date date = new Date( new Float(tmpDate).longValue()*24*60*60*1000 );
    Et ça me donne
    date = Sun Jun 25 02:00:00 CEST 2079

    alors que j'attendrais (cf openoffice)
    date = Sun Jun 23 11:16:00 CEST 2009

    Qu'est-ce que j'ai oublié ?

    Merci pour votre aide

  8. #8
    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 : 45
    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
    new Float(tmpDate).longValue() <- tu tronque les virgule avant de faire la multipliaction. C'est après la mulitplication qu'il faut tronquer. Sinon tu tronque au jour près

    Edit: j'avais pas vu l'année. Après recherche, il semble que le pivot de openoffice soit le 30 décembre 1899 et non pas epoch comme je le pensais. Le calcul suivant, sur cette base, permet un résultat correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SimpleDateFormat sdf = new SimpleDateFormat("dd MM yyyy HH:mm:ss");
    		sdf.setTimeZone(TimeZone.getTimeZone("europe/Brussels"));
    		Date d = sdf.parse("30 12 1899 00:00:00");
    		System.out.println(sdf.format(d));
    		GregorianCalendar g = new GregorianCalendar();
    		String tmpDate = "39987.46944";
    		System.out.println( sdf.format(new Date( d.getTime()+(long)(new Float(tmpDate)*24*60*60*1000) )));
    Sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    30 12 1899 00:00:00
    23 06 2009 11:16:50
    Note: le calcul a 50 secondes d'erreur, probablement du à la différence entre openoffice et java sur le calcul des leap seconds.

  9. #9
    lr
    lr est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    new Float(tmpDate).longValue() <- tu tronque les virgule avant de faire la multipliaction. C'est après la mulitplication qu'il faut tronquer. Sinon tu tronque au jour près
    Merci, mais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date date = new Date( new Float(new Float(tmpDate).floatValue()*24*60*60*1000).longValue() );
    ce n'est pas mieux

  10. #10
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    ce code (c'est celui de tchize_ avec GMT comme TimeZone) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SimpleDateFormat sdf = new SimpleDateFormat("dd MM yyyy HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date d = sdf.parse("30 12 1899 00:00:00");
    System.out.println(sdf.format(d));
    String tmpDate = "39987.46944";
    System.out.println( sdf.format(new Date( d.getTime()+(long)(new Float(tmpDate)*24*60*60*1000) )));
    a l'air de fonctionner

    Citation Envoyé par sevyc64 Voir le message
    c'est tout simplement la représentation numérique classique d'une Date, la forme sous laquelle elle est stockée et avec laquelle tout système travaille.
    Evidemment, c'est jamais stocké sous forme de long avec le 01/01/1970 comme date de base...

  11. #11
    lr
    lr est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Par défaut
    Ca marche, merci beaucoup pour votre aide

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

Discussions similaires

  1. [Dates] Formater une date dans un tableau
    Par orleans dans le forum Langage
    Réponses: 14
    Dernier message: 25/01/2008, 05h46
  2. Changer le format d'une date dans la commande
    Par leloup84 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 07/08/2007, 13h42
  3. Format d'une date dans un combo
    Par bobobobo01 dans le forum WinDev
    Réponses: 17
    Dernier message: 11/07/2007, 16h33
  4. formater une date dans un gridview
    Par intissar_g dans le forum ASP.NET
    Réponses: 8
    Dernier message: 09/07/2007, 16h02
  5. Réponses: 13
    Dernier message: 27/12/2006, 17h52

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