초 값을 시간 분 초로 변환 하시겠습니까?

나는 초 값 (BigDecimal 변수)을 “1 시간 22 분 33 초”와 같은 editText의 문자열로 변환하려고했습니다.

나는 이것을 시도했다 :

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

(초 단위의 값인 roundThreeCalc가 있으므로 여기서 변환하려고합니다.)

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

그런 다음 editText를 sequnceCaptureTime String으로 설정합니다. 그러나 그것은 작동하지 않았습니다. 매번 앱을 강제 종료합니다. 나는 여기에 완전히 깊이 빠져 있습니다. 어떤 도움이라도 대단히 감사합니다. 즐거운 코딩 되세요!



답변

당신은 더 많은 행운을 가져야합니다

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

이렇게하면 각 분할 후 소수 값이 삭제됩니다.

편집 : 작동하지 않으면 이것을 시도하십시오. (방금 작성하고 테스트했습니다)

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


답변

BigDecimal을 사용해야합니까? 필요하지 않다면 int 또는 long을 몇 초 동안 사용하고 약간 단순화합니다.

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

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

하지만 문자열에서 두 자리 값 (또는 기타)인지 확인하기 위해 각각을 채울 수 있습니다.


답변

DateUtils.formatElapsedTime(long), ” MM:SS“또는 ” H:MM:SS” 형식으로 경과 시간을 형식화합니다 . 찾고있는 문자열을 반환합니다. 여기 에서 설명서를 찾을 수 있습니다.


답변

다음은 작동 코드입니다.

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


답변

Java 8에서 정말 유용한 것

import java.time.LocalTime;

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


답변

Java의 내장 TimeUnit 라이브러리를 선호 합니다.

long seconds = TimeUnit.MINUTES.toSeconds(8);


답변

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;

}