Java 日历返回错误时间(以毫秒为单位)Android

Java calendar retunrning wrong time in milliseconds Android

在 android 应用程序中,我有倒数计时器来显示游戏剩余时间。它工作正常,但是当我出于某种原因想要以毫秒为单位的时间时,它总是给我整分钟。

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

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

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

示例输出: 429780000 429780000 429780000

这就是同一分钟的所有内容,但我没有得到秒数

tl;博士

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

java.time

您使用的日期时间 classes 被现代 java.time classes.

显然,您想使用自 UTC 1970 年第一时刻的纪元参考点 1970-01-01T00:00Z 以来的毫秒数。为此,使用 Instant class.

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

很简单:

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