Java 减去两个长值时的一小时差
我试图生成程序在执行结束时完成打印作业所需的总时间。下面是我用来实现这一点的代码行Java 减去两个长值时的一小时差,java,date,subtraction,Java,Date,Subtraction,我试图生成程序在执行结束时完成打印作业所需的总时间。下面是我用来实现这一点的代码行 long startTime = System.currentTimeMillis(), endTime; //actual programming logic endTime = System.currentTimeMillis(); System.out.println((new SimpleDateFormat("HH:mm:ss.SSS").format(new Date(endTime).getTim
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。虽然我可以想象,这可能是一个非常普遍面临的问题,但我尽了最大努力在网上搜索这个问题的最佳关键字,但什么都没有引起我的注意。有人能解释一下吗
任何反应都是非常特殊的。谢谢。您正在格式化一个数字,因为正在包装和取消包装长字符 试试这个
).format(new Date(endTime - startTime)));
或者至少
").format(new Date(new Date(endTime).getTime() - new Date(startTime).getTime()))));
运行与您的代码类似的代码时:
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):
输出:
1969-12-31 16:00:00.582
您正在构建一个日期
,其零值为UTC 1970年1月1日00:00:00,但它是在您自己的本地时区中构建的,该时区似乎比UTC 1970年1月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();
}
请注意,持续时间/期间不是日期。看起来您应该使用
新日期(endTime-startTime)
,即使您继续使用此方法…@SotiriosDelimanolis,但他应该获得基于1970年1月1日0:00的日期(因此,1970年1月1日0:00:00.582)似乎没有什么理由从long
值到Date
再返回。我想知道格式(long)
是否可以编译。也许改用Joda时间(至少在Java8到来之前)。@谢谢大家的回复。
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();
}