在秒表之后如何以正确的格式显示日期?

时间:2019-01-30 14:46:11

标签: java guava

我最近正在使用番石榴。秒表有这样一个问题。 我有一个方法可以计算执行put方法的总时间和数量,以便计算在执行put方法上花费的平均时间。

        Stopwatch stopwatch = Stopwatch.createStarted();
        cacheEntry.put(str, new CacheEntry(str));
        putCounter++;
        mapBasedStatisticsCache.setPutCounter(putCounter);
        currentTime += stopwatch.stop().elapsed(TimeUnit.NANOSECONDS);
        System.out.println(currentTime);
        mapBasedStatisticsCache.setCurrentTime(currentTime);

然后,我计算平均时间(以纳秒为单位)

public long getAveragePutTime() {
        return getCurrentTime() / getPutCounter();
    }

然后如何将getAveragePutTime方法的结果解析为hh:mm:ss:ms格式?

我正在尝试这样做:

public String getAveragePutTime() {
    long result = getCurrentTime() / getPutCounter();
    long hh = TimeUnit.NANOSECONDS.toHours(result);
    long mm = TimeUnit.NANOSECONDS.toMinutes(result);
    long ss = TimeUnit.NANOSECONDS.toSeconds(result);
    long ms = TimeUnit.NANOSECONDS.toMillis(result);
    return "Hours: " + hh + " minutes: " + mm + " seconds: " + ss + " millisecond: " + ms;
}

但是我有这个结果:

Nanos: 128240
Hours: 0 minutes: 0 seconds: 0 millisecond: 0

1 个答案:

答案 0 :(得分:0)

您有128420纳秒。那是0.000128420秒。那是0.128420毫秒。整数0.128420毫秒是0毫秒。所以你的结果实际上是正常的。

但是...您还有其他问题! getAveragePutTime()的书写方式将使您拥有多余的数字。因此,如果您有几个小时,请将其从剩菜剩饭中删除:

public String getAveragePutTime() {
  long result = getCurrentTime() / getPutCounter();
  long hh = TimeUnit.NANOSECONDS.toHours(result);
  result -= TimeUnit.HOURS.toNanos(hh);
  long mm = TimeUnit.NANOSECONDS.toMinutes(result);
  result -= TimeUnit.MINUTES.toNanos(mm);
  long ss = TimeUnit.NANOSECONDS.toSeconds(result);
  result -= TimeUnit.SECONDS.toNanos(mm);
  long ms = TimeUnit.NANOSECONDS.toMillis(result);
  return "Hours: " + hh + " minutes: " + mm + " seconds: " + ss + " millisecond: " + ms;
}