首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >两个给定日期之间的进度条- Android Studio

两个给定日期之间的进度条- Android Studio
EN

Stack Overflow用户
提问于 2021-04-14 18:53:51
回答 2查看 253关注 0票数 2

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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;
}

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

代码语言:javascript
代码运行次数:0
运行
复制
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
}

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

编辑:这是我使用以下代码得到的结果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-14 20:07:43

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

代码语言:javascript
代码运行次数:0
运行
复制
    long startDate = ....  ;
    long endDate = .....  //calendar.getTimeInMillis();
    long diffDate = endDate - startDate;

然后获取currentDate always as long值:

代码语言:javascript
代码运行次数:0
运行
复制
    long currentDate =  ... ;
    long currentDiff = currentDate - startDate;

最后,计算应用于ProgressBar的进度:

代码语言:javascript
代码运行次数:0
运行
复制
    float progress = (float)currentDiff/diffDate*100;

并更新您的ProgressBar:

代码语言:javascript
代码运行次数:0
运行
复制
    LinearProgressIndicator linearProgressIndicator = findViewById(R.id.progress);
    linearProgressIndicator.setProgress((int)progress);

通过以下方式:

代码语言:javascript
代码运行次数:0
运行
复制
    <com.google.android.material.progressindicator.LinearProgressIndicator
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/progress"
        android:indeterminate="false"/>

票数 1
EN

Stack Overflow用户

发布于 2021-04-14 19:08:25

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

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67090316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档