2010-07-08 4 views
3

Quel est le meilleur moyen d'obtenir le nombre de secondes dans une représentation sous forme de chaîne comme "hh: mm: ss"?Nombre de secondes dans "HH: MM: SS"

De toute évidence, Integer.parseInt (s.substring (...)) * 3600 + Integer.parseInt (s.substring (...)) * 60 + Integer.parseInt (s.substring (...)) travaux.

Mais je ne veux pas tester cela, et de réinventer le wheal, je pense qu'il existe un moyen d'utiliser DateTimeFormat ou d'autres classes de bibliothèques standard.

Merci!

Répondre

8

Basé sur pakoressolution:

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
    Date reference = dateFormat.parse("00:00:00"); 
    Date date = dateFormat.parse(string); 
    long seconds = (date.getTime() - reference.getTime())/1000L; 

reference est utilisé pour compenser les différents fuseaux horaires et il n'y a pas de problème avec l'heure d'été parce que SimpleDateFormat n'utilise pas la date réelle, il retourne la date Epoc (1er Janvier , 1970 = pas d'heure d'été).

Simplifier (pas beaucoup):

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date date = dateFormat.parse("01:00:10"); 
    long seconds = date.getTime()/1000L; 

mais je serais toujours un coup d'oeil à Joda-Time ...

+0

+1 pour améliorer et corriger ma réponse :) – pakore

+0

merci! et merci à tous. Top choses! En utilisant une ref, bien sûr. –

3

Une façon originale: La version Calendar (mis à jour avec les suggestions dans les commentaires):

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
Date date = dateFormat.parse(string); 
//Here you can do manually date.getHours()*3600+date.getMinutes*60+date.getSeconds(); 
//It's deprecated to use Date class though. 
//Here it goes an original way to do it. 
Calendar time = new GregorianCalendar(); 
time.setTime(date); 
time.setTimeZone(TimeZone.getTimeZone("UTC")); 
time.set(Calendar.YEAR,1970); //Epoc year 
time.set(Calendar.MONTH,Calendar.JANUARY); //Epoc month 
time.set(Calendar.DAY_OF_MONTH,1); //Epoc day of month 
long seconds = time.getTimeInMillis()/1000L; 

Disclaimer: Je l'ai fait par cœur, en regardant juste à la documentation, alors peut-être il y a une faute de frappe ou deux.

+0

ne sais pas si elle est un problème dans ce cas, mais je me souviens d'avoir du mal avec des fuseaux horaires faisant quelque chose de similaire. –

+0

C'était la meilleure réponse, mais ça n'a toujours pas fonctionné pour moi, malheureusement il y a une petite différence (environ 300 secondes) avec le vrai nombre et je ne sais pas d'où ça vient. Essayez la solution ci-dessus avec "00:00:10". Merci beaucoup quand même, bravo. –

+0

Je vais essayer dans 12h. Je n'ai pas de dev env en ce moment. 300 secondes c'est beaucoup! Pouvez-vous poster les échantillons que vous avez essayés, le résultat et le résultat attendu? – pakore

Questions connexes