【问题标题】:Progress bar between two given Dates - Android Studio两个给定日期之间的进度条 - Android Studio
【发布时间】:2021-07-09 10:03:39
【问题描述】:

我想要一个进度条来显示给定日期之间的剩余时间。 我已经在我的应用程序上放置了一个计时器,它每秒刷新一次,并给出两个给定日期之间的时差。

这是计算以下日期之间时间的代码:

public String printDifference(Date startDate, Date endDate) {
    //milliseconds
    long different = endDate.getTime() - startDate.getTime();


    System.out.println("startDate : " + startDate);
    System.out.println("endDate : "+ endDate);
    System.out.println("different : " + different);

    long secondsInMilli = 1000;
    long minutesInMilli = secondsInMilli * 60;
    long hoursInMilli = minutesInMilli * 60;
    long daysInMilli = hoursInMilli * 24;

    long elapsedDays = different / daysInMilli;
    different = different % daysInMilli;

    long elapsedHours = different / hoursInMilli;
    String hour = String.valueOf(elapsedHours);
    different = different % hoursInMilli;

    long elapsedMinutes = different / minutesInMilli;
    String mins = String.valueOf(elapsedMinutes);
    different = different % minutesInMilli;

    long elapsedSeconds = different / secondsInMilli;
    String sec = String.valueOf(elapsedSeconds);
    if(Integer.parseInt(hour)<10){
        hour = "0"+hour;
    }
    if(Integer.parseInt(mins)<10){
        mins = "0"+mins;
    }
     if(Integer.parseInt(sec)<10){
        sec = "0"+sec;
    }


    return hour + ":" + mins + ":" + sec;
}

这是更新显示的代码,看起来像倒计时:

private void updateDisplay() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            Date curr = Calendar.getInstance().getTime();

            Calendar tmr = Calendar.getInstance();
            tmr.add(Calendar.DAY_OF_MONTH, 1);

            Date tmrTime = tmr.getTime();

            SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy, hh:mm:ss aa", Locale.getDefault());
            SimpleDateFormat df2 = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());



            String currentDate = df.format(curr);
            String shewanDate = df2.format(curr)+", "+shewan+":00 pm";
            String bayaniDate = df2.format(curr)+", "+bayani+":00 am";
            String bayaniDateTmr = df2.format(tmrTime)+", "+bayani+":00 am";

            Date currentD = new Date(), shewanD = new Date(), bayaniD = new Date(), bayaniTmrD = new Date();
            try {
                currentD = df.parse(currentDate);
                shewanD = df.parse(shewanDate);
                bayaniD = df.parse(bayaniDate);
                bayaniTmrD = df.parse(bayaniDateTmr);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            
            try {
                    currentD = df.parse(currentDate);
                    bayaniTmrD = df.parse(bayaniDateTmr);

                    time.setText(printDifference(currentD, bayaniTmrD));
            } catch (ParseException e) {
                e.printStackTrace();
            }


    },0,1000);//Update text every second
}

如何制作水平进度条以显示两个日期之间的剩余时间。提前致谢。

编辑: 这是我使用代码得到的:

【问题讨论】:

  • 只要计算dateA和dateB的差值,放在0-100范围内
  • @GabrieleMariotti 我还很年轻,所以我有点困惑。我有很长的“不同”,它带走了并给了我一个很长的数字,我接受它,然后我必须在 updateDisplay() 中跟踪它并从那里取得进展?

标签: android android-studio progress-bar android-progressbar


【解决方案1】:

这样做。计算日期之间的差异并将其 div 到 100(进度条 0..100)以获得进度条步骤。

int progress = 100;
long diff = endDateValue.getTime() - startDateValue.getTime();
val step = dif/100;
val currentStateDiff = endDateValue.getTime() - new Date().getTime();
if(currentStateDiff <= 0) progress = 0 else progress = currentStateDiff / step

【讨论】:

    【解决方案2】:

    给定 2 个日期,您可以将它们之间的差异计算为长值:

        long startDate = ....  ;
        long endDate = .....  //calendar.getTimeInMillis();
        long diffDate = endDate - startDate;
    

    然后将 currentDate 始终作为 long 值:

        long currentDate =  ... ;
        long currentDiff = currentDate - startDate;
    

    最后计算应用到你的 ProgressBar 的进度:

        float progress = (float)currentDiff/diffDate*100;
    

    并更新您的 ProgressBar:

        LinearProgressIndicator linearProgressIndicator = findViewById(R.id.progress);
        linearProgressIndicator.setProgress((int)progress);
    

    与:

        <com.google.android.material.progressindicator.LinearProgressIndicator
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/progress"
            android:indeterminate="false"/>
    

    【讨论】:

    • 这太棒了,非常感谢。只是一件事,我的日期通常是从当前日期到另一个日期
    • @Hevarh 在任何情况下,您都有 3 个日期:开始 - 结束和进度日期 = 进度条的值
    • 那么在你的情况下,“今天”的价值是多少?
    • @Hevarh 对不起我的错。它是开始日期。答案已更新。
    • 非常感谢,成功了!
    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多