Salut !

Pour situer le problème je voulais convertir un string obtenu avec un getParameter, "min", "hour" ou "day" dans les equivalents en milliseconde 60*1000, 60*60*1000 ou 24*60*60*1000 pour ensuite le rajouter à une date déjà convertie en millisecondes et revenir ensuite à la nouvelle date obtenue.

Donc je pensais faire un peu comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public long changeTag2Time(String tag){
		long scaleTime;
		if(tag.equals("min")){
			scaleTime = 60*1000;
		}
		else if(tag.equals("hour")){
			scaleTime = 60*60*1000;
		}
		else{ //tag.equals("day")
			scaleTime = 24*60*60*1000;
		}
		return scaleTime;
}
et ensuite un truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
SimpleDateFormat  simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String testdate = "2010-01-01 00:00:00";   //par exemple
Date mytestdate = simpleDateFormat.parse(testdate);
Calendar testcal = Calendar.getInstance();
testcal.setTime(mytestdate);
long testmilli = testcal.getTimeInMillis() + changeTag2Time("min");
Date mytestdateCorr = new Date(testmilli);
Mais au détour de mes tests j'ai remarqué que l'équivalent de 0 milliseconde n'est pas du tout ce que la doc Calendar prétend, à savoir, le 1 janvier 1970 à 00:00:00 GMT (Gregorian) !!!

Voici un bout de code de tests et les outputs obtenus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SimpleDateFormat  simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
String testdate = "1970-01-01 00:01:00";
Date mytestdate = simpleDateFormat.parse(testdate);
Calendar testcal = Calendar.getInstance();
testcal.setTime(mytestdate);
long testmilli = testcal.getTimeInMillis() - (60*1000L);
long longtest2 = 60*1000L;
System.out.println("Difference dans testdate : "+testmilli);
Date test1 = new Date(testcal.getTimeInMillis());
Date test2 = new Date(longtest2);
System.out.println("In milli --> test1 : "+testcal.getTimeInMillis()+"   test2 : "+60*1000L);
System.out.println("In date  --> test1 : "+test1+"   test2 : "+test2);
long zero = 0L;
Date zerodate = new Date(zero);
System.out.println("Date 0 : "+zerodate);
qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
Difference dans testdate : -3600000
In milli --> test1 : -3540000   test2 : 60000
In date  --> test1 : Thu Jan 01 00:01:00 CET 1970   test2 : Thu Jan 01 01:01:00 CET 1970
Date 0 : Thu Jan 01 01:00:00 CET 1970
Après vérification c'est en fait un horaire CET (GMT+1h) qui explique bien cela ... et donc en fait qu'avec 60*1000 il n'ajoutait pas une minute mais une heure et une minute.
A part enlever à la bourrin 1h manuellement je voulais vous consulter pour savoir quelles solutions je pourrais avoir pour corriger cela ?
Ou alors si vous avez des idées pour faire ce que je veux faire plus simplement je suis preneur !

Merci