Java日历重新运行错误的时间(以毫秒为单位)Android



在安卓应用程序中,我有countdowtimer来显示游戏中剩余的时间。它工作得很好,但当我出于某种原因想要以毫秒为单位的时间时,它总是给我整整一分钟的时间。

为了解释,我在数据库中有时间,我从它减去当前时间,但它总是给我整数,总是整分钟,所以我的秒永远不会好。这是代码

setTimeLeftInMilliseconds(calendarEnd.getTimeInMillis() - Calendar.getInstance().getTimeInMillis());

calendarEnd总是一样的,但我想最新的看看还有多少时间。

输出示例:429780000429780000429780000

这都是同一分钟,但我没有得到秒

它很简单:

Instant start = Instant.parse("2017-10-03T10:15:30.00Z");
Instant end = Instant.parse("2017-10-03T10:16:30.00Z");

Duration duration = Duration.between(start, end);

tl;dr

java.time.Duration.between( 
Instant.ofEpochMilli( then ) , 
Instant.now() 
)

java.time

您使用的是糟糕的日期-时间类,这些类已被现代java.time类所取代。

显然,您希望使用自1970年UTC第一时刻的历元参考点1970-01-01T00:00Z以来的毫秒数。为此,请使用Instant类。

long now = Instant.now().toEpochMilli() ;

以毫秒为单位计算运行时间。

long elapsed = ( now - then ) ;

最好使用Instant对象来确定Duration

Duration elapsed = Duration.between( Instant.ofEpochMilli( then ) , Instant.now() ) ;

您可以要求以毫秒为单位计算整个持续时间。

long elapsedMillis = elapsed.toMillis() ;

我不确定这是否是正确的逻辑。不应该减去两个Long值,在这种情况下,时间以毫秒为单位。可以选择以秒、分钟等为单位查找两个日期之间的差异。使用此选项可以显示您的剩余时间。

检查这个代码,你可以简化它,因为你不必使用这里的所有东西:

DateTimeUtils obj = new DateTimeUtils();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/M/yyyy hh:mm:ss");
try {
Date date1 = simpleDateFormat.parse("10/10/2013 11:30:10");
Date date2 = simpleDateFormat.parse("13/10/2013 20:35:55");
obj.printDifference(date1, date2);
} catch (ParseException e) {
e.printStackTrace();
}
//1 minute = 60 seconds
//1 hour = 60 x 60 = 3600
//1 day = 3600 x 24 = 86400
public void printDifference(Date startDate, Date endDate) { 
//milliseconds
long different = endDate.getTime() - startDate.getTime();
System.out.println("startDate : " + startDate);
System.out.println("endDate : "+ endDate);
System.out.println("different : " + different);
long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;
long elapsedDays = different / daysInMilli;
different = different % daysInMilli;
long elapsedHours = different / hoursInMilli;
different = different % hoursInMilli;
long elapsedMinutes = different / minutesInMilli;
different = different % minutesInMilli;
long elapsedSeconds = different / secondsInMilli;
System.out.printf(
"%d days, %d hours, %d minutes, %d seconds%n", 
elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds);
}

输出:

startDate : Thu Oct 10 11:30:10 SGT 2013
endDate : Sun Oct 13 20:35:55 SGT 2013
different : 291945000
3 days, 9 hours, 5 minutes, 45 seconds

要获取日期,只需使用

Date endDate = simpleDateFormat.format(new Date(calendarEnd.getTimeInMillis()));
Date currentDate = simpleDateFormat.format(new Date(Calendar.getInstance().getTimeInMillis()));

相关内容

最新更新