这是我必须以%.7f格式创建时间戳字符串的函数。此功能仅需2-3毫秒即可执行。但它在我的代码中从很多地方调用,即使优化它1 ms,我将在一个特定的用户操作中节省1秒。有什么想法吗?
public static String makeTimestamp()
{
long millis = System.currentTimeMillis();
String result;
Double ts = new Double((millis) / 1000.0);
ByteArrayOutputStream b = new ByteArrayOutputStream();
PrintStream p = new PrintStream(b);
p.printf("%.7f", ts );
result = b.toString();
try
{
p.close();
b.close();
} catch (IOException ioe) {};
return result;
}
答案 0 :(得分:2)
我不知道它的速度有多快,但是怎么样
public static String makeTimestamp()
{
return String.format("%.7f", ((double)System.currentTimeMillis())/1000);
}
(我不确定为什么我们将双重带入图片中。)
答案 1 :(得分:2)
目前还不清楚为什么要浏览PrintStream等。出了什么问题:
public static String makeTimestamp()
{
long millis = System.currentTimeMillis();
return String.format("%.7f", millis / 1000.0);
}
在我的上网本上,每次迭代需要大约0.04ms ......但即使你的原始代码每次迭代也只需要大约0.1ms。你现在在跑什么需要2-3ms?例如,你在调试器中运行吗?我不明白为什么会这么慢 - 这不像我的上网本是一台特别快的机器。
除了所有性能问题之外,我认为上述方法的主要优点是简单性。由于没有充分的理由,原件非常复杂。
答案 2 :(得分:2)
如果您绝对需要它,这大约比字符串格式快10倍:
public static String makeTimestamp() {
return formatTime(System.currentTimeMillis(), 7);
}
public static String formatTime(long millis, int fractionDigits) {
int integerDigits = (int) Math.log10(millis / 1000.0) + 1;
char[] chars = new char[integerDigits + fractionDigits + 1];
for (int i = 0; i < chars.length; i++) {
chars[i] = '0';
}
millis *= Math.pow(10, fractionDigits - 3);
for (int i = chars.length - 1; i >= 0; i--) {
if (i == integerDigits) {
chars[i] = '.';
i--;
}
chars[i] = (char) (millis % 10);
chars[i] += '0';
millis /= 10;
}
return new String(chars);
}