Problème de conversion de temps en fonction de timezone

Problème de conversion de temps en fonction de timezone - Java - Programmation

Marsh Posté le 23-01-2007 à 11:06:47    

Bonjour,
J'ai une petite methode qui me permet de calculer les temps d'execution:

Code :
  1. public static String convertFromMillisToTime(long timeInMSec, String pattern) {
  2.  Calendar c = Calendar.getInstance();
  3.  c.setTimeInMillis(timeInMSec);
  4.  c.add(Calendar.HOUR, -1);
  5.  return new SimpleDateFormat(pattern).format(c.getTime());
  6. } public static void main(java.lang.String[] args) {
  7.  System.out.println(convertFromMillisToTime(100000, "HH:MM:ss" ));
  8. }


 
Comme vous pouvez le voir je suis obligé à Paris de retrancher 1 heure car j'obtient 01:01:40 au lieu de 00:01:40...A New York elle me renvoit 18:01:40...à Hong Kong ...7:01:40
 
Bref , mon appli doit tourner dans 3 Timezone different et j'obtiens un mauvais temps :S
Comment faire?


Message édité par PETOZAK le 23-01-2007 à 11:09:39
Reply

Marsh Posté le 23-01-2007 à 11:06:47   

Reply

Marsh Posté le 23-01-2007 à 11:39:35    

Et la méthode setTimezone de Calendar ?

Reply

Marsh Posté le 23-01-2007 à 11:48:48    

pas besoin...vu que getInstance prend le default local + Timezone

Reply

Marsh Posté le 23-01-2007 à 14:00:20    

Et en passant par la classes Date au lieu de Calendar ?


---------------
Light is right
Reply

Marsh Posté le 23-01-2007 à 14:54:33    

Petozak , je ne comprends pas ton programme.
tu m'as l'air de tenter de transformer une durée en une date ce qui n'est pas juste.

Reply

Marsh Posté le 23-02-2007 à 14:36:32    

En effet grosse erreur!
 
voici la reponse:
 
 
Salut,
 
 
Une [B]durée [/B]n'est pas une [B]date [/B]! Cela n'a même rien à voir...
 
Lorsque tu fais :

Code :
  1. Calendar c = Calendar.getInstance();
  2. c.setTimeInMillis(100000);


Tu crée une date correspondant au 1er janvier 1970 00:01:40 à l'heure GMT.
Mais cette date correspond à autre chose selon le fuseau horaire d'où ton problème...
 
A la rigueur tu pourrais utiliser le TimeZone GMT pour récupérer l'heure :

Code :
  1. public static String convertFromMillisToTime(long timeInMSec, String pattern) {
  2.  Calendar c = Calendar.getInstance();
  3.  c.setTimeInMillis(timeInMSec);
  4.  DateFormat df = new SimpleDateFormat(pattern);
  5.  df.setTimeZone(TimeZone.getTimeZone("GMT" ));
  6.  return df.format(c.getTime());
  7. }


Seulement ce n'est pas une solution très propre, déjà car elle t'empêche de dépasser les 24h, et ensuite car les Calendars gèrent également des règles qui font que certaines journées "durent plus longtemps" d'une seconde...
Tout cela n'a rien à voir avec une durée...
 
 
Il serait bien plus prudent de calculer cela toi même :

Code :
  1. public static String convertFromMillisToTime(long timeInMSec, String pattern) {
  2.  long millisecondes = timeInMSec;
  3.  long secondes = millisecondes/1000L;
  4.  millisecondes -= secondes*1000L;
  5.  long minutes = secondes/60L;
  6.  secondes -= minutes*60L;
  7.  long heures = minutes/60L;
  8.  minutes -= heures*60L;
  9.  return String.format("%02d:%02d:%02d", heures, minutes, secondes);
  10. }


 
Ou encore mieux : tu peux utiliser la méthode DurationFormatUtils.formatDuration() des Jakarta Commons Lang...
 
 
a++


Message édité par PETOZAK le 23-02-2007 à 14:36:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed