2

我得到了一个倒计时到特定日期的倒计时。每个刻度(间隔 1 秒)更新一个文本框,其中包含距离事件发生的天/小时/分钟。我的问题是分钟(还不知道天/小时)一直在闪烁。这意味着它在下降到 16 然后 17 然后 16 之前的一分钟内说 18 然后 17 然后 18 然后 17 并且它继续这样做。

闪烁的问题解决了,现在只是时区不起作用。(使用 Pshemo 的代码解决了闪烁问题)

此外 TimeZone 似乎没有工作。它显示2小时。尝试使用 SimpleTimeZone 更改它,但它不起作用,仍然显示 +2 小时(无论 SimpleTimeZone 上的设置如何)

可能是什么原因?

倒计时代码:

         new CountDownTimer(remaining, 1000) {
         TextView tv = (TextView)getActivity().findViewById(R.id.introTimeLeft);
         public void onTick(long millisUntilFinished) {         
             SimpleTimeZone ts = new SimpleTimeZone(2, "Middle Europe");

             Calendar cal = Calendar.getInstance(ts);
             cal.set(2012, 5, 28, 17, 0);
             long endTime = cal.getTimeInMillis(); 
             long currentTime = System.currentTimeMillis();
             long remaining = endTime - currentTime;

         tv.setText(getDurationBreakdown(remaining));
         }

         ...

      }.start();

public String getDurationBreakdown(long millis)
{
    if(millis < 0)
    {
        throw new IllegalArgumentException("Duration must be greater than zero!");
    }

    long days = TimeUnit.MILLISECONDS.toDays(millis);
    millis -= TimeUnit.DAYS.toMillis(days);

    long hours = TimeUnit.MILLISECONDS.toHours(millis);
    millis -= TimeUnit.HOURS.toMillis(hours);

    long minutes = (long) Math.ceil(TimeUnit.MILLISECONDS.toMinutes(millis));

    StringBuilder sb = new StringBuilder(64);
    sb.append(days);
    sb.append(" Days ");
    sb.append(hours);
    sb.append(" Hours ");
    sb.append(minutes);
    sb.append(" Minutes");

    return(sb.toString());
}
4

2 回答 2

2

这只是疯狂的猜测,但尝试它没有魅力。

从我看到你读到的currentTimeendTime在同一个地方。

long endTime = cal.getTimeInMillis(); 
long currentTime = System.currentTimeMillis();

您也没有在日历对象中指定毫秒,因此cal.getTimeInMillis()使用当前毫秒。所以你的代码

long remaining = endTime - currentTime;

有时会等于 value like 183360000,但有时也会等于 value like 182999999(取决于创建endTime和之间经过的毫秒数currentTime)。

这可能会导致 1 毫秒的错误计算,但在四舍五入后,它也可能是 1 秒/分钟/小时/天(如果此值将在下一毫秒内发生变化)。

您可以通过仅读取endTime一次并在计算时仅更新 currentTime来解决它remaining

于 2012-06-26T14:15:51.813 回答
0

我认为您可能正在从两个不同的位置更新您的文本视图。是否有另一个类正在更新您的 TextView?

于 2012-06-26T14:26:51.677 回答