我做了一个应用程序,我需要获取事件当天的剩余时间,使用CountDownTimer
我设法获得天数、小时数和日期计数器的类,但我想不出如何获得剩余时间。
为此,我有两个通过两个确定的日期Date
,我需要知道它们之间的剩余时间,对于事件的日期,我有以下格式:
Date(int year, int month, int day, int hour, int minute, int second);
而对于当前时间,我只是生成一个新日期
Date date = new Date();
如何以天,小时,分钟和秒为单位获得剩余时间。
我的代码只有在事件发生前的当前时间有计数器:
首先声明变量:
private TextView countDown;
private CountDownTimer countDownTimer;
private long initialTime =
DateUtils.DAY_IN_MILLIS * 110 +
DateUtils.HOUR_IN_MILLIS * 9 +
DateUtils.MINUTE_IN_MILLIS * 3 +
DateUtils.SECOND_IN_MILLIS * 42;
然后在CountDownTimer
:
countDownTimer = new CountDownTimer(initialTime, 1000) {
StringBuilder time = new StringBuilder();
@Override
public void onTick(long millisUntilFinished) {
time.setLength(0);
// Use days if appropriate
if(millisUntilFinished > DateUtils.DAY_IN_MILLIS) {
long count = millisUntilFinished / DateUtils.DAY_IN_MILLIS;
if(count > 1)
time.append(count).append(" Dias ");
else
time.append(count).append(" Dia ");
millisUntilFinished %= DateUtils.DAY_IN_MILLIS;
}
time.append(DateUtils.formatElapsedTime(Math.round(millisUntilFinished / 1000d)));
countDown.setText(time.toString());
}
@Override
public void onFinish() {
countDown.setText(DateUtils.formatElapsedTime(0));
countDown.setText("Dia del evento");
}
}.start();
首先,您必须以毫秒为单位获得差异:
然后进行操作以了解您需要的单位的差异:
您必须考虑在进行整数除法时,会在计算中引入截断误差。
使用这种方法,您可以实现它,它类似于您正在做的事情:
我们确定我们想要获得差异的日期:
根据这些值,我们执行
getDiferencia()
具有初始日期和最终日期的方法:该方法在内部打印开始和结束日期,因此您可以检查值:
并获得一个带有差值的字符串:
我为将来的问题添加了我的完整解决方案。
首先声明要使用的变量。
然后我们用一个新实例初始化变量
calendar
并发送我们未来事件的日期。现在我们初始化类型变量
Date
=eventDate
event day 和presentDate
= current day,第一个从之前创建的日历中获取它的值,第二个从当天获取它的值。下一步,我们获得以毫秒为单位的差异,首先分配事件的日期,然后分配当前日期,我们将结果存储在类型变量中
long
并将它们发送到Log
以验证结果不是负数,如果是错误分配的日期。下一步我们通过这些简单的数学运算获得天、小时、分钟和秒的等价,所有结果都存储在类型变量中
long
。这将为我们提供以下结果,例如:
因为我需要对日期进行计数,所以我
ìnitialTime
用差异的值初始化变量diff
。然后我将值分配给构造函数以初始化变量
countDownTimer
:有了这个
CountDownTimer
从当前日期到事件日期的作品。