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:
et ensuite un truc du genre :
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; }
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) !!!
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);
Voici un bout de code de tests et les outputs obtenus :
qui donne :
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);
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.
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
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
Partager