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