Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Countdown Timer to Date

I am trying to make a countdown timer for a game/date in android. I want to create a timer that displays the days, hours, minutes, and seconds to a date I specify with a final variable. The timer then sets text views to show the days, hours, minutes, and seconds to the user.

Any suggestions about how I could code this?

like image 316
ultimatenirvana Avatar asked Aug 09 '12 01:08

ultimatenirvana


People also ask

Can you do a countdown on Android?

TheDayBefore. Much like Big Days, this countdown app informs you not only days remaining but also days elapsed. This simple app supports various events like anniversary, birthday, wedding, and many more.


2 Answers

CountDownTimer that will display the time formatted to hours,minute,days,and seconds.

 public class DemotimerActivity extends Activity {
        /** Called when the activity is first created. */
         TextView tv;
         long diff;
         long oldLong;
         long NewLong;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            tv = new TextView(this);
            this.setContentView(tv);
            SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
            String oldTime = "19.02.2018, 12:00";//Timer date 1
            String NewTime = "20.02.2018, 14:00";//Timer date 2
            Date oldDate, newDate;
            try {
                oldDate = formatter.parse(oldTime);
                newDate = formatter.parse(NewTime);
                oldLong = oldDate.getTime();
                NewLong = newDate.getTime();
                diff = NewLong - oldLong;
           } catch (ParseException e) {
                e.printStackTrace();
       }
         MyCount counter = new MyCount(diff, 1000);
         counter.start();
    }


    // countdowntimer is an abstract class, so extend it and fill in methods
    public class MyCount extends CountDownTimer {
    MyCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        txtNumber1.setText("done!");
    }

    @Override
    public void onTick(long millisUntilFinished) {
         long millis = millisUntilFinished;
        String hms = (TimeUnit.MILLISECONDS.toDays(millis)) + "Day "
                + (TimeUnit.MILLISECONDS.toHours(millis) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millis)) + ":")
                + (TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)) + ":"
                + (TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));
        txtNumber1.setText(/*context.getString(R.string.ends_in) + " " +*/ hms);
    }
}

    }
like image 64
kyogs Avatar answered Nov 02 '22 21:11

kyogs


Try this one:

SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
        formatter.setLenient(false);


        String endTime = "25.06.2017, 15:05:36"

        Date endDate;
        try {
            endDate = formatter.parse(endTime);
            milliseconds = endDate.getTime();

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

         startTime = System.currentTimeMillis();

         diff = milliseconds - startTime;


           mCountDownTimer = new CountDownTimer(milliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {

                startTime=startTime-1;
                Long serverUptimeSeconds =
                        (millisUntilFinished - startTime) / 1000;

                String daysLeft = String.format("%d", serverUptimeSeconds / 86400);
                txtViewDays.setText(daysLeft);

                String hoursLeft = String.format("%d", (serverUptimeSeconds % 86400) / 3600);
                txtViewHours.setText(hoursLeft);

                String minutesLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) / 60);

                txtViewMinutes.setText(minutesLeft);

                String secondsLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) % 60);
                txtViewSecond.setText(secondsLeft);


            }

            @Override
            public void onFinish() {

            }
        }.start();

    }
like image 31
Neha Tyagi Avatar answered Nov 02 '22 19:11

Neha Tyagi