首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以更快的方式创建%.7f格式的时间戳字符串

以更快的方式创建%.7f格式的时间戳字符串
EN

Stack Overflow用户
提问于 2011-03-18 15:04:02
回答 3查看 1.3K关注 0票数 0

这是一个函数,我必须创建%.7f格式的时间戳字符串。执行此函数只需2-3毫秒。但它是从我的代码中的许多地方调用的,通过将其优化1毫秒,我将在一个特定的用户操作中节省1秒。有什么想法吗?

代码语言:javascript
运行
复制
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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-18 15:42:36

如果你确实需要它,这大约比字符串格式化快10倍:

代码语言:javascript
运行
复制
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);
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-18 15:07:55

我不知道它快了多少,但是

代码语言:javascript
运行
复制
public static String makeTimestamp()
{
    return String.format("%.7f", ((double)System.currentTimeMillis())/1000);
}

(我不确定为什么我们要把double带到这幅图中)。

票数 2
EN

Stack Overflow用户

发布于 2011-03-18 15:09:07

完全不清楚你为什么要经历PrintStream等等,这有什么问题:

代码语言:javascript
运行
复制
public static String makeTimestamp()
{
    long millis = System.currentTimeMillis();
    return String.format("%.7f", millis / 1000.0);
}

在我的上网本上,每次迭代大约需要0.04ms……但是即使你的原始代码每次迭代也只需要0.1ms左右。你现在在什么平台上运行需要2-3ms的时间?例如,你是在一个调试器中运行吗?我不明白为什么它会这么慢--我的上网本又不是特别快。

尽管所有的性能都很重要,但我想说的是,与原来的方法相比,上述方法的主要优点是简单。原始的是非常复杂的,没有任何好的理由。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5349018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档