Convertir la valeur des secondes en heures minutes secondes?

J’ai essayé de convertir une valeur de secondes (dans une variable BigDecimal) en une chaîne dans un texte d’édition tel que “1 heure 22 minutes 33 secondes” ou quelque chose du genre.

J’ai essayé ceci:

Ssortingng sequenceCaptureTime = ""; BigDecimal roundThreeCalc = new BigDecimal("0"); BigDecimal hours = new BigDecimal("0"); BigDecimal myremainder = new BigDecimal("0"); BigDecimal minutes = new BigDecimal("0"); BigDecimal seconds = new BigDecimal("0"); BigDecimal var3600 = new BigDecimal("3600"); BigDecimal var60 = new BigDecimal("60"); 

(J’ai un roundThreeCalc qui est la valeur en secondes donc je tente de le convertir ici.)

 hours = (roundThreeCalc.divide(var3600)); myremainder = (roundThreeCalc.remainder(var3600)); minutes = (myremainder.divide(var60)); seconds = (myremainder.remainder(var60)); sequenceCaptureTime = hours.toSsortingng() + minutes.toSsortingng() + seconds.toSsortingng(); 

Ensuite, je mets editText à la chaîne sequnceCaptureTime. Mais ça n’a pas marché. Il a forcé la fermeture de l’application à chaque fois. Je suis totalement hors de ma scope ici, toute aide est grandement appréciée. Heureux codage!

Vous devriez avoir plus de chance avec

 hours = roundThreeCalc.divide(var3600, BigDecimal.ROUND_FLOOR); myremainder = roundThreeCalc.remainder(var3600); minutes = myremainder.divide(var60, BigDecimal.ROUND_FLOOR); seconds = myremainder.remainder(var60); 

Cela laissera tomber les valeurs décimales après chaque division.

Edit: Si cela n’a pas fonctionné, essayez ceci. (Je l’ai juste écrit et testé)

 public static int[] splitToComponentTimes(BigDecimal biggy) { long longVal = biggy.longValue(); int hours = (int) longVal / 3600; int remainder = (int) longVal - hours * 3600; int mins = remainder / 60; remainder = remainder - mins * 60; int secs = remainder; int[] ints = {hours , mins , secs}; return ints; } 

Est-il nécessaire d’utiliser un BigDecimal? Si vous n’y êtes pas obligé, j’utiliserais un int ou long pour les secondes, et cela simplifierait un peu les choses:

 hours = totalSecs / 3600; minutes = (totalSecs % 3600) / 60; seconds = totalSecs % 60; timeSsortingng = Ssortingng.format("%02d:%02d:%02d", hours, minutes, seconds); 

Cependant, vous souhaiterez peut-être append des valeurs à deux chiffres (ou autre) dans la chaîne.

DateUtils.formatElapsedTime(long) , met en forme un temps écoulé sous la forme ” MM:SS ” ou ” H:MM:SS “. Il renvoie la chaîne que vous recherchez. Vous pouvez trouver la documentation ici

Voici le code de travail:

 private Ssortingng getDurationSsortingng(int seconds) { int hours = seconds / 3600; int minutes = (seconds % 3600) / 60; seconds = seconds % 60; return twoDigitSsortingng(hours) + " : " + twoDigitSsortingng(minutes) + " : " + twoDigitSsortingng(seconds); } private Ssortingng twoDigitSsortingng(int number) { if (number == 0) { return "00"; } if (number / 10 == 0) { return "0" + number; } return Ssortingng.valueOf(number); } 

Quelque chose de vraiment utile dans Java 8

 import java.time.LocalTime; private Ssortingng ConvertSecondToHHMMSSSsortingng(int nSecondTime) { return LocalTime.MIN.plusSeconds(nSecondTime).toSsortingng(); } 

Je préfère la bibliothèque intégrée TimeUnit de java

 long seconds = TimeUnit.MINUTES.toSeconds(8); 
 private Ssortingng ConvertSecondToHHMMSsortingng(int secondtTime) { TimeZone tz = TimeZone.getTimeZone("UTC"); SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); df.setTimeZone(tz); Ssortingng time = df.format(new Date(secondtTime*1000L)); return time; } 

Ceci est ma solution simple:

 Ssortingng secToTime(int sec) { int seconds = sec % 60; int minutes = sec / 60; if (minutes >= 60) { int hours = minutes / 60; minutes %= 60; if( hours >= 24) { int days = hours / 24; return Ssortingng.format("%d days %02d:%02d:%02d", days,hours%24, minutes, seconds); } return Ssortingng.format("%02d:%02d:%02d", hours, minutes, seconds); } return Ssortingng.format("00:%02d:%02d", minutes, seconds); } 

Test Results :

 Result: 00:00:36 - 36 Result: 01:00:07 - 3607 Result: 6313 days 12:39:05 - 545488745 

Voici ma fonction pour résoudre le problème:

 public static Ssortingng getConvertedTime(double time){ double h,m,s,mil; mil = time % 1000; s = time/1000; m = s/60; h = m/60; s = s % 60; m = m % 60; h = h % 24; return ((int)h < 10 ? "0"+String.valueOf((int)h) : String.valueOf((int)h))+":"+((int)m < 10 ? "0"+String.valueOf((int)m) : String.valueOf((int)m)) +":"+((int)s < 10 ? "0"+String.valueOf((int)s) : String.valueOf((int)s)) +":"+((int)mil > 100 ? Ssortingng.valueOf((int)mil) : (int)mil > 9 ? "0"+Ssortingng.valueOf((int)mil) : "00"+Ssortingng.valueOf((int)mil)); } 

Ce code fonctionne bien:

 txtTimer.setText(Ssortingng.format("%02d:%02d:%02d",(SecondsCounter/3600), ((SecondsCounter % 3600)/60), (SecondsCounter % 60))); 

J’utilise ceci:

  public Ssortingng SEG2HOR( long lnValue) { //OK Ssortingng lcStr = "00:00:00"; Ssortingng lcSign = (lnValue>=0 ? " " : "-"); lnValue = lnValue * (lnValue>=0 ? 1 : -1); if (lnValue>0) { long lnHor = (lnValue/3600); long lnHor1 = (lnValue % 3600); long lnMin = (lnHor1/60); long lnSec = (lnHor1 % 60); lcStr = lcSign + ( lnHor < 10 ? "0": "") + String.valueOf(lnHor) +":"+ ( lnMin < 10 ? "0": "") + String.valueOf(lnMin) +":"+ ( lnSec < 10 ? "0": "") + String.valueOf(lnSec) ; } return lcStr; } 

J’aime garder les choses simples donc:

  int tot_seconds = 5000; int hours = tot_seconds / 3600; int minutes = (tot_seconds % 3600) / 60; int seconds = tot_seconds % 60; Ssortingng timeSsortingng = Ssortingng.format("%02d Hour %02d Minutes %02d Seconds ", hours, minutes, seconds); System.out.println(timeSsortingng); 

Le résultat sera: 01 heure 23 minutes 20 secondes

Je sais que c’est assez vieux mais en java 8:

 LocalTime.MIN.plusSeconds(120).format(DateTimeFormatter.ISO_LOCAL_TIME) 

Un moyen simple et agréable de le faire en utilisant GregorianCalendar

Importez-les dans le projet:

 import java.util.GregorianCalendar; import java.util.Date; import java.text.SimpleDateFormat; import java.util.Scanner; 

Et alors:

 Scanner s = new Scanner(System.in); System.out.println("Seconds: "); int secs = s.nextInt(); GregorianCalendar cal = new GregorianCalendar(0,0,0,0,0,secs); Date dNow = cal.getTime(); SimpleDateFormat ft = new SimpleDateFormat("HH 'hours' mm 'minutes' ss 'seconds'"); System.out.println("Your time: " + ft.format(dNow)); 

Si vous voulez les unités h , min et sec pour une durée, vous pouvez utiliser ceci:

 Ssortingng convertSeconds(int seconds) int h = seconds/ 3600; int m = (seconds % 3600) / 60; int s = seconds % 60; Ssortingng sh = (h > 0 ? Ssortingng.valueOf(h) + " " + "h" : ""); Ssortingng sm = (m < 10 && m > 0 && h > 0 ? "0" : "") + (m > 0 ? (h > 0 && s == 0 ? Ssortingng.valueOf(m) : Ssortingng.valueOf(m) + " " + "min") : ""); Ssortingng ss = (s == 0 && (h > 0 || m > 0) ? "" : (s < 10 && (h > 0 || m > 0) ? "0" : "") + Ssortingng.valueOf(s) + " " + "sec"); return sh + (h > 0 ? " " : "") + sm + (m > 0 ? " " : "") + ss; } int seconds = 3661; Ssortingng duration = convertSeconds(seconds); 

C’est beaucoup d’opérateurs conditionnels. La méthode retournera ces chaînes:

 0 -> 0 sec 5 -> 5 sec 60 -> 1 min 65 -> 1 min 05 sec 3600 -> 1 h 3601 -> 1 h 01 sec 3660 -> 1 h 01 3661 -> 1 h 01 min 01 sec 108000 -> 30 h 

Je l’utilise en python pour convertir un flottant représentant des secondes en heures, minutes, secondes et microsecondes. Il est raisonnablement élégant et est pratique pour convertir un type datetime via strptime pour convertir. Il pourrait également être facilement étendu à des intervalles plus longs (semaines, mois, etc.) si nécessaire.

  def sectohmsus(seconds): x = seconds hmsus = [] for i in [3600, 60, 1]: # seconds in a hour, minute, and second hmsus.append(int(x / i)) x %= i hmsus.append(int(round(x * 1000000))) # microseconds return hmsus # hours, minutes, seconds, microsecond 

J’ai essayé le meilleur moyen et moins de code, mais il est peut-être un peu difficile de comprendre comment j’ai écrit mon code, mais si vous êtes bon en mathématiques, c’est si facile

 import java.util.Scanner; 

heures de cours {

 public static void main(Ssortingng[] args) { Scanner input = new Scanner(System.in); double s; System.out.println("how many second you have "); s =input.nextInt(); double h=s/3600; int h2=(int)h; double h_h2=h-h2; double m=h_h2*60; int m1=(int)m; double m_m1=m-m1; double m_m1s=m_m1*60; System.out.println(h2+" hours:"+m1+" Minutes:"+Math.round(m_m1s)+" seconds"); } 

}

plus il est précis!