Java: convert seconds into day, hour, minute and seconds using TimeUnit

后端 未结 8 1955
我寻月下人不归
我寻月下人不归 2020-12-08 06:25

I am using TimeStamp class to convert seconds into Day,Hours,Minutes,Seconds. I used following code

public static void calculateTime(long seconds) {
                 


        
8条回答
  •  误落风尘
    2020-12-08 06:58

    This is my code:

    public static String secondsToString(TimeUnit greatestUnit, long sourceDuration, TimeUnit sourceUnit) {
    
        int ordinal = greatestUnit.ordinal();
        if(ordinal<=sourceUnit.ordinal())
            return String.format("%02d", sourceDuration);
    
        final long greatestDuration = greatestUnit.convert(sourceDuration, sourceUnit);
        final long rest = sourceDuration - sourceUnit.convert(greatestDuration, greatestUnit);
    
        return String.format("%02d:", greatestDuration) + secondsToString(TimeUnit.values()[--ordinal], rest, sourceUnit);
    }
    

    or by loop

    public static String secondsToStringByLoop(TimeUnit greatestUnit, long sourceDuration, TimeUnit sourceUnit) {
    
        final StringBuffer sb = new StringBuffer();
        int ordinal = greatestUnit.ordinal();
    
        while(true){
            if(ordinal<=sourceUnit.ordinal()) {
                sb.append(String.format("%02d", sourceDuration));
                break;
            }
    
            final long greatestDuration = greatestUnit.convert(sourceDuration, sourceUnit);
    //          if(greatestDuration>0 || sb.length()>0)
            sb.append(String.format("%02d:", greatestDuration));
    
            sourceDuration -= sourceUnit.convert(greatestDuration, greatestUnit);
            greatestUnit = TimeUnit.values()[--ordinal];
        };
    
        return sb.toString();
    }
    

    usage example:

    String str = secondsToString(TimeUnit.DAYS, 1000, TimeUnit.SECONDS);
    

    function returns: "00:00:16:40" (days:hours:minutes:seconds)

    str = UnitsConverter.secondsToString(TimeUnit.DAYS, 1000, TimeUnit.MINUTES);
    

    returns: "00:16:40" (days:hours:minutes)

    str = UnitsConverter.secondsToString(TimeUnit.MINUTES, 1000, TimeUnit.SECONDS);
    

    returns: "16:40" (minutes:seconds)

提交回复
热议问题