Most idiomatic way to print a time difference in Java?

前端 未结 6 1127
后悔当初
后悔当初 2020-11-27 22:54

I\'m familiar with printing time difference in milliseconds:

 long time = System.currentTimeMillis();
 //do something that takes some time...
 long completed         


        
6条回答
  •  囚心锁ツ
    2020-11-27 23:24

    A library designed for the purpose is the better approach, but SimpleDateFormat with the right TimeZone may suffice for periods less than a day. Longer periods require treating the day specially.

    import java.text.DateFormat;
    import java.util.Date;
    import java.text.SimpleDateFormat;
    import java.util.TimeZone;
    
    public class Elapsed {
    
        private static final long MS_DAY = 24 * 60 * 60 * 1000;
        private final DateFormat df = new SimpleDateFormat("HH : mm : ss : S");
    
        public Elapsed() {
            df.setTimeZone(TimeZone.getTimeZone("GMT"));
        }
    
        private String format(long elapsed) {
            long day = elapsed / MS_DAY;
            StringBuilder sb = new StringBuilder();
            sb.append(day);
            sb.append(" : ");
            sb.append(df.format(new Date(elapsed)));
            return sb.toString();
        }
    
        public static void main(String[] args) {
            Elapsed e = new Elapsed();
            for (long t = 0; t < 3 * MS_DAY; t += MS_DAY / 2) {
                System.out.println(e.format(t));
            }
        }
    }
    

    Console output:

    0 : 00 : 00 : 00 : 0
    0 : 12 : 00 : 00 : 0
    1 : 00 : 00 : 00 : 0
    1 : 12 : 00 : 00 : 0
    2 : 00 : 00 : 00 : 0
    2 : 12 : 00 : 00 : 0
    

提交回复
热议问题