将秒值转换为小时分钟秒?

| 我一直在尝试将秒值(在BigDecimal变量中)转换为editText之类的字符串,例如\“ 1小时22分33秒\”或类似的形式。 我已经试过了:
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);
不过,您可能需要填充每个字符以确保它们是字符串中的两位数字值(或其他值)。     

bab

DateUtils.formatElapsedTime(long)
,将经过的时间格式化为\“
MM:SS
\”或\“ formats7 formats \”格式。它返回您要查找的字符串。您可以在这里找到文档     
这是工作代码:
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;

}
    
这是我的简单解决方案:
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
    
因此,我喜欢保持简单:
    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);
结果将是:01小时23分钟20秒     
使用GregorianCalendar的一种好方法 将它们导入到项目中:
import java.util.GregorianCalendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Scanner;
接着:
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));
    
如果您希望持续使用单位
h
min
sec
,则可以使用以下方法:
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);
这是很多条件运算符。该方法将返回这些字符串:
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
    
该代码工作正常:
txtTimer.setText(String.format(\"%02d:%02d:%02d\",(SecondsCounter/3600), ((SecondsCounter % 3600)/60), (SecondsCounter % 60)));
    
我用这个:
 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;           
    }
    
这是我解决问题的功能:
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));
}
    
我知道这已经很老了,但是在Java 8中:
LocalTime.MIN.plusSeconds(120).format(DateTimeFormatter.ISO_LOCAL_TIME)
    
仅需几分钟和几秒钟即可使用
String.format(\"%02d:%02d\", (seconds / 3600 * 60 + ((seconds % 3600) / 60)), (seconds % 60))
    
我在python中使用它来将代表秒的浮点数转换为小时,分钟,秒和微秒。它相当优雅,很容易通过strptime转换为datetime类型进行转换。如果需要,还可以轻松地将其扩展为更长的时间间隔(数周,数月等)。
    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
    
我已经尝试了最好的方法和更少的代码,但是可能很难理解我是如何编写我的代码的,但是如果您擅长数学,那就太简单了
import java.util.Scanner;
上课时间{
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\");





}
} 更准确的是!     
使用Java 8,您可以很容易地从很长的几秒钟开始以String格式实现时间,例如,
LocalTime.ofSecondOfDay(86399L)
在此,给定值是最大允许转换(最多24小时),结果将是
23:59:59
优点:1)无需手动转换,也无需在数字后附加0 缺点:最多只能工作24小时     
借助Java 8,您可以轻松地从很长的几秒钟开始以LocalTime格式获得时间,例如,
LocalTime.ofSecondOfDay(86399L)
在此,给定值是最大允许转换(最多24小时),结果将是
23:59:59
优点:1)无需手动转换,也无需在数字后附加0 缺点:最多只能工作24小时     
从java.time的持续时间
    BigDecimal secondsValue = BigDecimal.valueOf(4953);
    if (secondsValue.compareTo(BigDecimal.valueOf(Long.MAX_VALUE)) > 0) {
        System.out.println(\"Seconds value \" + secondsValue + \" is out of range\");
    } else {
        Duration dur = Duration.ofSeconds(secondsValue.longValueExact());
        long hours = dur.toHours();
        int minutes = dur.toMinutesPart();
        int seconds = dur.toSecondsPart();

        System.out.format(\"%d hours %d minutes %d seconds%n\", hours, minutes, seconds);
    }
该代码段的输出为:   1小时22分33秒 如果ѭ36中的秒数不为零,那么此代码将无法正常运行,但是您可以对其进行修改。该代码可在Java 9及更高版本中使用。在Java 8中,从
Duration
到小时分和秒的转换比较罗word,请参阅底部的链接以了解操作方法。我留给您选择单词的正确单数或复数形式(小时或小时等)。 链接 Oracle教程:Date Time说明如何使用java.time。 lauhub的回答显示了Java 8中从ѭ37到天,小时,分钟和秒的转换。     

要回复问题请先登录注册