Calendar et "Epoch" bizarre !
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:
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:
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:
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:
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