0

我需要在未来的指定日期和现在之间以 Days:Hours:Minutes 格式显示倒数计时器。因此,例如结束日期是 2013 年 12 月 4 日下午 1:30,现在是 2013 年 12 月 3 日下午 12:30,我的 textView(或任何其他视图)应显示“剩余时间 1 天:1 小时:0 分钟”

不想使用 joda-time 库,因为它将我的应用程序大小增加了大约 4.1 MB,而且我只需要在我的应用程序中使用一次日期/时间功能。我正在使用 java 提供的日历 API,但无法实现此“计时器”/“倒数计时器”功能

知道我应该如何实施吗?

编辑:我的应用程序将仅用于 1 个时区,即。EST,所以我不必担心时区校正

编辑:到目前为止我已经尝试过,获取 2 日历的月份

cal1.get(Calendar.MONTH); //to get the month
cal2.get(Calendar.MONTH);

cal1.get(Calendar.DAY_OF_MONTH);  //to get the day
cal2.get(Calendar.DAY_OF_MONTH);

cal1.get(Calendar.HOUR_OF_DAY);  //to get the hour in 24 hours
cal2.get(Calendar.HOUR_OF_DAY);

cal1.get(Calendar.MINUTE); //to get the minutes
cal2.get(Calendar.MINUTE);

cal1.get(Calendar.SECOND);  //to get seconds
cal2.get(Calendar.SECOND);

现在我减去月份,如果是 0,那么我知道差异小于 1 个月,同样我减去天、小时、分钟。然而,这并没有给我一个准确的结果。示例 - 今天 2013 年 7 月 6 日上午 4 日,结束日期 2013 年 7 月 7 日上午 3 日,根据我的算法,它会说剩余时间是1 天零 -1 小时,我运行一个计时器每秒执行此任务

我需要更好的算法和更好的显示方式,我在 UI 线程上一次又一次地执行相同的任务,这可能会导致我感觉滞后

4

1 回答 1

2

我猜你有两个java.util.Date对象要比较。首先,您想要某种每 N 秒执行一次的计时器。Handler.postDelayed()工作得很好。每次执行时,您使用timeMs = futureDate.getTime() - System.currentTimeMillis(). 这为您提供以毫秒为单位的时间差。然后您只需要将其转换为所需的格式:例如seconds = timeMs / 1000 % 60.

于 2013-10-29T17:14:30.053 回答