1

私はアンドロイドのイベントにカウントダウンしようとしています。イベントの日時はデータベースに保存されますが、カウントダウンは必要以上の日数を返します。

これが試したものです。

String EventDate="2013-12-26 15:00:00";

SimpleDateFormat FormatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.US);
FormatDate.setTimeZone(TimeZone.getTimeZone("GMT+1"));

try {
    Date date = FormatDate.parse(mm);


    } catch (Exception e) {
    // TODO: handle exception
}
Long ToCount=date.getTime();
CountDownTimer cdt = new CountDownTimer(ToCount, 1000) {

    public void onTick(long millisUntilFinished) {
        EventTv.setText(""+ String.format(
        "%d Days,%d Hours, %d min, %d sec",
        TimeUnit.MILLISECONDS.toDays(millisUntilFinished),
        TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))

        ));


    }

    public void onFinish() {
        // TODO Auto-generated method stub
        EventTv.setText("done");

    }
}.start();

しかし、アプリを実行すると、TextView が表示されます(16059days,3875429hours,23125799min)

私が間違っていることを教えてください。

4

1 に答える 1

2

問題は

date.getTime()

1970 年 1 月 1 日午前 0 時 GMT からのミリ秒数を返します。

したがって、現在の時刻からミリ秒数を取得するには、使用する必要があります

Date now = new Date();
Long ToCount = date.getTime() - now.getTime();

また、 millisUntilFinished を使用したい関連フォーマットに変換するには

TimeUnit.MILLISECONDS.toDays(millisUntilFinished),
TimeUnit.MILLISECONDS.toHours(millisUntilFinished) -
TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millisUntilFinished)),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) -  
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))
于 2013-12-19T17:01:30.010 に答える