0

我正在尝试生成我的程序在程序执行结束时完成打印作业所花费的总时间。以下是我正在使用的代码行来实现这一点。

long startTime = System.currentTimeMillis(), endTime;
//actual programming logic
 endTime = System.currentTimeMillis();
System.out.println((new SimpleDateFormat("HH:mm:ss.SSS").format(new Date(endTime).getTime() - new Date(startTime).getTime())));

这里的结果是 01:00:00.582 代替 00:00:00.582。虽然我可以想象,这可能是一个非常普遍面临的问题,但我尽我所能在网络上使用最佳关键字搜索此问题,但没有引起我的注意。有人可以对此有所了解吗?

任何回应都非常受欢迎。谢谢你。

4

3 回答 3

4

运行与您的代码类似的代码时:

long startTime = System.currentTimeMillis(), endTime;
try { Thread.sleep(582); } catch (InterruptedException ignored) {}
endTime = System.currentTimeMillis();
System.out.println((new SimpleDateFormat("HH:mm:ss.SSS").format(
    new Date(endTime).getTime() - new Date(startTime).getTime())));

我得到这个输出:

16:00:00.582

显示日期显示我所在的时区 (UTC-8):

System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(
    new Date(endTime).getTime() - new Date(startTime).getTime())));

输出:

1969-12-31 16:00:00.582

您正在构建一个Date零值是 1970 年 1 月 1 日 00:00:00 UTC,但这是在您自己的本地时区构建的,这似乎比 1970 年 1 月 1 日的 UTC 早一小时。

不要Date使用时间间隔构造 a 。

于 2013-09-26T16:16:18.163 回答
3

我设法生产出我正在寻找的东西。如果有人需要,这是它的代码:

static String fn_Z_getTimeDifference(Long startTime, Long endTime)
{
    long processTime = endTime - startTime;
    long days = processTime / 86400000L;
    processTime -= days * 86400000L;
    long hours = processTime / 3600000L;
    processTime -= hours * 3600000L;
    long mins = processTime / 60000L;
    processTime -= mins * 60000L;
    long seconds = processTime / 1000L;
    processTime -= seconds * 1000L;
    long milliSeconds = processTime ;
    return (Long.toString(hours)+ ":" + Long.toString(mins) + ":" + Long.toString(seconds) + ":" + Long.toString(milliSeconds)).toString();
}
于 2013-09-27T08:34:59.193 回答
0

您正在格式化一个数字,因为包装和展开长。

尝试这个

 ).format(new Date(endTime - startTime)));

或者至少

 ").format(new Date(new Date(endTime).getTime() - new Date(startTime).getTime()))));
于 2013-09-26T16:13:56.907 回答