How to format a duration in java? (e.g format H:MM:SS)

前端 未结 19 2058
情话喂你
情话喂你 2020-11-22 03:32

I\'d like to format a duration in seconds using a pattern like H:MM:SS. The current utilities in java are designed to format a time but not a duration.

19条回答
  •  野的像风
    2020-11-22 04:27

    Here is one more sample how to format duration. Note that this sample shows both positive and negative duration as positive duration.

    import static java.time.temporal.ChronoUnit.DAYS;
    import static java.time.temporal.ChronoUnit.HOURS;
    import static java.time.temporal.ChronoUnit.MINUTES;
    import static java.time.temporal.ChronoUnit.SECONDS;
    
    import java.time.Duration;
    
    public class DurationSample {
        public static void main(String[] args) {
            //Let's say duration of 2days 3hours 12minutes and 46seconds
            Duration d = Duration.ZERO.plus(2, DAYS).plus(3, HOURS).plus(12, MINUTES).plus(46, SECONDS);
    
            //in case of negative duration
            if(d.isNegative()) d = d.negated();
    
            //format DAYS HOURS MINUTES SECONDS 
            System.out.printf("Total duration is %sdays %shrs %smin %ssec.\n", d.toDays(), d.toHours() % 24, d.toMinutes() % 60, d.getSeconds() % 60);
    
            //or format HOURS MINUTES SECONDS 
            System.out.printf("Or total duration is %shrs %smin %sec.\n", d.toHours(), d.toMinutes() % 60, d.getSeconds() % 60);
    
            //or format MINUTES SECONDS 
            System.out.printf("Or total duration is %smin %ssec.\n", d.toMinutes(), d.getSeconds() % 60);
    
            //or format SECONDS only 
            System.out.printf("Or total duration is %ssec.\n", d.getSeconds());
        }
    }
    

提交回复
热议问题