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
Version imprimable
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 ? 8O
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.Citation:
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
Je n'ai pas dit le contraire, la partie décimale du nombre correspond aux heures, minutes, secondes, millisecondes si nécessaireCitation:
Sauf 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 donneCode:
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:
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:
1
2 30 12 1899 00:00:00 23 06 2009 11:16:50
ce code (c'est celui de tchize_ avec GMT comme TimeZone) :
a l'air de fonctionner ;)Code:
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...
Ca marche, merci beaucoup pour votre aide