2013-09-26 43 views
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。虽然我可以想象,这可能是一个非常普遍面临的问题,我尽最大努力在网络上针对此问题搜索最佳关键字,但没有引起我的注意。有人可以对此有所了解吗?

任何反应都是非常重要的。谢谢。

+5

请注意,持续时间/期间不是日期。 –

+0

看起来你应该使用'new Date(endTime - startTime)',即使你继续使用这种方法... –

+0

@SotiriosDelimanolis但他应该得到基于1970年1月1日0:00的日期所以,1970年1月1日的0:00:00.582) – SJuan76

回答

1

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

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(); 
} 
0

您正在格式化一个数字,因为包装和拆开多头。

试试这个

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

或者至少是

").format(new Date(new Date(endTime).getTime() - new Date(startTime).getTime())))); 
+0

我以前尝试过,但似乎也没有工作。 – Srii

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的零值是00:00:00 1970年1月1日UTC,但是这是在你自己的当地时区构建的,这似乎是1970年1月1日UTC的1小时。

请勿使用时间间隔构造Date

+0

+1 _Don't使用时间间隔构建日期._ –

+0

@rgettman,谢谢你的提示。这确实有帮助。 – Srii