web-dev-qa-db-de.com

Sekundenwert in Stunden Minuten Sekunden umrechnen?

Ich habe versucht, einen Wert von Sekunden (in einer BigDecimal-Variablen) in eine Zeichenfolge in einem Bearbeitungstext wie "1 Stunde 22 Minuten 33 Sekunden" oder so etwas zu konvertieren.

Ich habe es versucht:

String 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");

(Ich habe einen roundThreeCalc, der der Wert in Sekunden ist, also versuche ich, ihn hier zu konvertieren.)

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

Dann setze ich den editText auf sequnceCaptureTime String. Aber das hat nicht funktioniert. Die App wird jedes Mal zwangsweise geschlossen. Ich bin hier total überfordert, jede Hilfe wird sehr geschätzt. Viel Spaß beim Codieren!

88
rabbitt

Du solltest mehr Glück haben mit

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

Dadurch werden die Dezimalwerte nach jeder Division gelöscht.

Bearbeiten: Wenn das nicht funktioniert hat, versuchen Sie dies. (Ich habe es gerade geschrieben und getestet)

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;
}
60
Haphazard

Muss ein BigDecimal verwendet werden? Wenn Sie nicht müssen, würde ich ein int oder long für Sekunden verwenden, und es würde die Dinge ein wenig vereinfachen:

hours = totalSecs / 3600;
minutes = (totalSecs % 3600) / 60;
seconds = totalSecs % 60;

timeString = String.format("%02d:%02d:%02d", hours, minutes, seconds);

Möglicherweise möchten Sie jedes Feld auffüllen, um sicherzustellen, dass es sich um zweistellige Werte (oder was auch immer) in der Zeichenfolge handelt.

205
Geobits

DateUtils.formatElapsedTime(long), formatiert eine abgelaufene Zeit in der Form "MM:SS" oder "H:MM:SS ". Gibt den gesuchten String zurück. Sie finden die Dokumentation hier

63
Blackbelt

Hier ist der Arbeitscode:

private String getDurationString(int seconds) {

    int hours = seconds / 3600;
    int minutes = (seconds % 3600) / 60;
    seconds = seconds % 60;

    return twoDigitString(hours) + " : " + twoDigitString(minutes) + " : " + twoDigitString(seconds);
}

private String twoDigitString(int number) {

    if (number == 0) {
        return "00";
    }

    if (number / 10 == 0) {
        return "0" + number;
    }

    return String.valueOf(number);
}
26
Rahim

Etwas sehr hilfreiches in Java 8

import Java.time.LocalTime;

private String ConvertSecondToHHMMSSString(int nSecondTime) {
    return LocalTime.MIN.plusSeconds(nSecondTime).toString();
}
24
Epicurist

Ich bevorzuge Javas eingebaute TimeUnit Bibliothek

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

  return time;

}
11
SKULL

Das ist meine einfache Lösung:

String 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 String.format("%d days %02d:%02d:%02d", days,hours%24, minutes, seconds);
        }
        return String.format("%02d:%02d:%02d", hours, minutes, seconds);
    }
    return String.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
8

Ich halte die Dinge deshalb gerne einfach:

    int tot_seconds = 5000;
    int hours = tot_seconds / 3600;
    int minutes = (tot_seconds % 3600) / 60;
    int seconds = tot_seconds % 60;

    String timeString = String.format("%02d Hour %02d Minutes %02d Seconds ", hours, minutes, seconds);

    System.out.println(timeString);

Das Ergebnis ist: 01 Stunde 23 Minuten 20 Sekunden

4
Nello

Eine schöne und einfache Möglichkeit, dies mit GregorianCalendar zu tun

Importieren Sie diese in das Projekt:

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

Und dann:

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));
3
Connor Cowling

Dieser Code funktioniert einwandfrei:

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

Ich weiß, das ist ziemlich alt, aber in Java 8:

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

verwenden Sie dies nur für Minuten und Sekunden

String.format("%02d:%02d", (seconds / 3600 * 60 + ((seconds % 3600) / 60)), (seconds % 60))
2
Asthme

Hier ist meine Funktion, um das Problem anzugehen:

public static String 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 ? String.valueOf((int)mil) : (int)mil > 9 ? "0"+String.valueOf((int)mil) : "00"+String.valueOf((int)mil));
}
2
leokash

Wenn Sie die Einheiten h, min und sec für eine bestimmte Dauer verwenden möchten, können Sie dies tun:

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

int seconds = 3661;
String duration = convertSeconds(seconds);

Das sind viele bedingte Operatoren. Die Methode gibt diese Zeichenfolgen zurück:

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
1
Nicolas

Ich benutze das:

 public String SEG2HOR( long lnValue) {     //OK
        String lcStr = "00:00:00";
        String 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;           
    }
1
cesin

ich habe versucht, den besten Weg und weniger Code, aber vielleicht ist es ein bisschen schwierig zu verstehen, wie ich meinen Code geschrieben habe, aber wenn Sie gut in Mathe sind, ist es so einfach

import Java.util.Scanner;

unterrichtsstunden {

public static void main(String[] 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");





}

}

mehr darüber ist genau!

Ich verwende dies in python), um einen Float zu konvertieren, der Sekunden in Stunden, Minuten, Sekunden und Mikrosekunden darstellt. Es ist einigermaßen elegant und eignet sich zum Konvertieren in einen Datetime-Typ über strptime to convert. Es könnte auch kann bei Bedarf leicht auf längere Intervalle (Wochen, Monate usw.) ausgedehnt werden.

    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
0
rtphokie