当前位置: 首页 > 知识库问答 >
问题:

从日期倒计时

景远航
2023-03-14

我试图实现一个'日期'倒计时计时器使用AndroidCountdown Timer类和Java时间从当前的一天,小时,分钟,秒到26十二月,2013 9:00 AM倒计时。下面是我的代码:

FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 12, 2013);

new CountDownTimer(timer.getIntervalMillis(), 1000) {

    @Override
    public void onTick(long millisUntilFinished) {
        int days = (int) ((millisUntilFinished / 1000) / 86400);
        int hours = (int) (((millisUntilFinished / 1000)
                - (days * 86400)) / 3600);
        int minutes = (int) (((millisUntilFinished / 1000)
                - (days * 86400) - (hours * 3600)) / 60);
        int seconds = (int) ((millisUntilFinished / 1000) % 60);

        String countdown = String.format("%02dd %02dh %02dm %02ds", days,
                hours, minutes, seconds);
        countdownTimer.setText(countdown);
    }

    @Override
    public void onFinish() {
        countdownBegins.setVisibility(View.GONE);
        countdownTimer.setText("IT'S HERE!");
    }
}.start();

这里是我的FestCountdown Timer类:

public class FestCountdownTimer {

    private long intervalMillis;

    public FestCountdownTimer(int second, int minute, int hour, int monthDay, int month, int year) {

        Time futureTime = new Time();

        // Set date to future time
        futureTime.set(second, minute, hour, monthDay, month, year);
        futureTime.normalize(true);
        long futureMillis = futureTime.toMillis(true);

        Time timeNow = new Time();

        // Set date to current time
        timeNow.setToNow();
        timeNow.normalize(true);
        long nowMillis = timeNow.toMillis(true);

        // Subtract current milliseconds time from future milliseconds time to retrieve interval
        intervalMillis = futureMillis - nowMillis;
    }

    public long getIntervalMillis() {
        return intervalMillis;
    }
}

现在时、分、秒都没问题。只是天数来了40。现在我把日期定在这个月的26号,2013年。所以目前26 - 16 = 10天。这应该是显示的天数。那为什么显示40?请帮忙。谢谢大家。

共有2个答案

狄旭
2023-03-14

你必须在考试中改正错误

FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 11,
            2013);

与此相反:

FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 12,
            2013);

因为:

voidAndroid。文本总体安排时间设置(整数秒、整数分钟、整数小时、整数月、整数年)

将方法设置为如下所示:

API级别3中添加的公共无效集(int second、int minute、int hour、int monthDay、int month、int year)设置字段。将工作日、年日和gmtoff设置为0,将isDst设置为-1。如果需要,请调用normalize(boolean)。

唐增
2023-03-14

在android.text.format.时间,有文件证明月份值范围是从0到11,所以十二月应该在这个api中有(不直观的)值11。所以当你说12天而不是11天时,你未来的日期是在一月份,然后你是30/31天后,这可以解释你的结果是40天而不是10天。

我为你使用如此糟糕的api感到抱歉。

 类似资料:
  • 我试图使一个倒计时,显示总天数,小时,分钟和秒的剩余特定日期。 这就是我到目前为止所创造的。 我用过计时器,它用Console.WriteLine计数,但TextViews什么也不显示,也不更新...有人知道如何每秒钟更新TextViews吗?

  • 我正在尝试实现一个倒计时计时器,它将使用一个特定的日期和时间开始。从那里,我需要它从1小时倒计时,然后更新最初的日期和时间,增加一个小时,然后无限期地重复自己。 这是用于一个产品拍卖,将得到一个新的产品,一旦一个售完,价格下降每小时从它添加到拍卖,可能是一天中的任何时间。 示例: 我需要这个计时器在2014,7,25,11,30,0,0开始(2014年8月25日美国东部时间上午11:30),它将倒

  • 问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样

  • 介绍 用于实时展示倒计时数值,支持毫秒精度。 引入 import { createApp } from 'vue'; import { CountDown } from 'vant'; const app = createApp(); app.use(CountDown); 代码演示 基础用法 time 属性表示倒计时总时长,单位为毫秒。 <van-count-down :time="time