在编写程序时经常会需要读取系统的时间,但是大多数语言获取的时间都是距1970年1月1日的毫秒数,十分不方便,在hadoop给出的计算π
值的mapreduce例子中有一个millis2string函数能将毫秒数转化为年日小时分秒毫秒显示的String,书写十分简洁,值得学习借鉴。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public static String millis2String (long n) { if (n < 0 ) return "-" + millis2String(-n); else if (n < 1000 ) return n + "ms" ; final StringBuilder b = new StringBuilder (); final int millis = (int )(n % 1000L ); if (millis != 0 ) b.append(String.format(".%03d" , millis)); if ((n /= 1000 ) < 60 ) return b.insert(0 , n).append("s" ).toString(); b.insert(0 , String.format(":%02d" , (int )(n % 60L ))); if ((n /= 60 ) < 60 ) return b.insert(0 , n).toString(); b.insert(0 , String.format(":%02d" , (int )(n % 60L ))); if ((n /= 60 ) < 24 ) return b.insert(0 , n).toString(); b.insert(0 , n % 24L ); final int days = (int )((n /= 24 ) % 365L ); b.insert(0 , days == 1 ? " day " : " days " ).insert(0 , days); if ((n /= 365L ) > 0 ) b.insert(0 , n == 1 ? " year " : " years " ).insert(0 , n); return b.toString(); }
写一个函数输出现在与1970年1月1日的时间间隔,输出结果:
1 46 years 113 days 7:07:31.820