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
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
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 ?![]()
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.c'est quoi ce format ?
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
Sauf que "tout système" travaille habituellement en nombre de millisecondes secondes depuis epoch.
A tenter:
Edit: en calculant à la mano la partie h mm ss, il semble que ce soit ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 new Date(chiffre*24*60*60*1000)![]()
Je n'ai pas dit le contraire, la partie décimale du nombre correspond aux heures, minutes, secondes, millisecondes si nécessaireSauf que "tout système" travaille habituellement en nombre de millisecondes secondes.
je voulais juste dire que d'habitude on stocke ca dans un long, pas dans un float![]()
Merci pour vos réponses.
J'ai essayé ça :
Et ça me donne
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 );
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
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:
Sortie:
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) )));
Note: le calcul a 50 secondes d'erreur, probablement du à la différence entre openoffice et java sur le calcul des leap seconds.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 30 12 1899 00:00:00 23 06 2009 11:16:50
Merci, mais avec
ce n'est pas mieux
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 code (c'est celui de tchize_ avec GMT comme TimeZone) :
a l'air de fonctionner
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) )));
Evidemment, c'est jamais stocké sous forme de long avec le 01/01/1970 comme date de base...
Partager