145 votes

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 de caractères dans un editText comme "1 hour 22 minutes 33 seconds" ou quelque chose de ce genre.

J'ai essayé :

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

(J'ai un roundThreeCalc qui représente la valeur en secondes, j'essaie donc de la convertir ici).

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

J'ai ensuite défini l'editText comme étant la chaîne sequnceCaptureTime. Mais cela n'a pas fonctionné. L'application a été fermée de force à chaque fois. Je suis totalement dépassé par la situation, toute aide est la bienvenue.

297voto

Geobits Points 12623

Est-il nécessaire d'utiliser une BigDecimal ? Si ce n'est pas nécessaire, j'utiliserais un int ou un long pour les secondes, ce qui simplifierait un peu les choses :

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

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

Cependant, vous voudrez peut-être remplir chaque chiffre pour vous assurer qu'il s'agit bien d'une valeur à deux chiffres (ou autre) dans la chaîne de caractères.

105voto

blackbelt Points 45840

DateUtils.formatElapsedTime(long) formatent un temps écoulé sous la forme " MM:SS " ou " H:MM:SS " . Il renvoie la chaîne de caractères que vous recherchez. Vous pouvez trouver la documentation ici

71voto

Haphazard Points 6804

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 permet de supprimer les valeurs décimales après chaque division.

Edit : Si cela n'a pas fonctionné, essayez ceci. (Je viens de l'écrire et de le tester)

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

36voto

Epicurist Points 53

Quelque chose de très utile dans Java 8

import java.time.LocalTime;

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

30voto

Rahim Points 479

Voici le code de travail :

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);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X