0%

将毫秒数转化为用年日小时分秒毫秒表示

在编写程序时经常会需要读取系统的时间,但是大多数语言获取的时间都是距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
/** Covert milliseconds to a String. */
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