java日历重新展开错误时间(毫秒)

eqqqjvef  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(307)

在android应用程序中,我有倒计时来显示游戏中剩余的时间。它工作的很好,但当我想得到毫秒的时间,因为某种原因,它总是给我整整一分钟。
为了解释,我在数据库中有时间,我从中减去当前时间,但它总是给我整数,总是整分钟,所以我的秒永远不会好。这是密码

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

calendarend总是一样的,但是我想让最新的来看看还有多少时间。
输出示例:429780000 429780000 429780000
那都是一分钟,但我没有秒

zpjtge22

zpjtge221#

热释光;博士

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() ;
dbf7pr2w

dbf7pr2w2#

很简单:

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);
zzoitvuj

zzoitvuj3#

我不确定去那里的逻辑是否正确。两个长值的减法,在本例中是以毫秒为单位的时间,不是您应该做的。有一个选项可以在两个日期之间以秒、分等为单位找出差异。使用此选项可以显示剩余时间。
检查以下代码,您可以简化这些代码,因为您不必使用这里的所有内容:

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

相关问题