为了账号安全,请及时绑定邮箱和手机立即绑定

计算Java / Groovy中的经过时间

计算Java / Groovy中的经过时间

潇湘沐 2019-10-11 10:49:26
我有...Date start = new Date().........Date stop = new Date()我想获得这两个日期之间的年,月,日,小时,分钟和秒。-我会提一个问题。我只想获取经过的时间(绝对值),而不考虑leap年,每月的天数等。因此,我认为不可能获得过去的年月,我所能得到的只是几天,几小时,几分钟和几秒钟。更具体地说,我想告诉您某项任务持续了例如20 sec13 min, 4 sec2 h, 10 min, 2 sec4 d, 4 h, 2 min, 2 sec因此,请原谅我缺乏精确性。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

我刚刚发现了这个来自Groovy的快速解决方案:


import groovy.time.TimeCategory 

import groovy.time.TimeDuration


TimeDuration td = TimeCategory.minus( stop, start )

println td


查看完整回答
反对 回复 2019-10-11
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

您可以使用除法和mod进行所有这些操作。


long l1 = start.getTime();

long l2 = stop.getTime();

long diff = l2 - l1;


long secondInMillis = 1000;

long minuteInMillis = secondInMillis * 60;

long hourInMillis = minuteInMillis * 60;

long dayInMillis = hourInMillis * 24;


long elapsedDays = diff / dayInMillis;

diff = diff % dayInMillis;

long elapsedHours = diff / hourInMillis;

diff = diff % hourInMillis;

long elapsedMinutes = diff / minuteInMillis;

diff = diff % minuteInMillis;

long elapsedSeconds = diff / secondInMillis;

那应该给您您要求的所有信息。


编辑:由于人们似乎很困惑,不,这不会考虑leap年或夏令时切换等问题。这是纯粹的消逝时间,这就是打开要求的时间。


查看完整回答
反对 回复 2019-10-11
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

使用标准的Date API并不是那么容易。


您可能要看Joda Time或JSR-310。


我不是Joda的专家,但是我认为代码是:


Interval interval = new Interval(d1.getTime(), d2.getTime());

Period period = interval.toPeriod();

System.out.printf(

    "%d years, %d months, %d days, %d hours, %d minutes, %d seconds%n", 

    period.getYears(), period.getMonths(), period.getDays(),

    period.getHours(), period.getMinutes(), period.getSeconds());


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 1012 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信