Android Countdown Timer to Date

前端 未结 7 1818
死守一世寂寞
死守一世寂寞 2020-12-14 11:34

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 fin

相关标签:
7条回答
  • 2020-12-14 12:00

    Here is an Android built-in CountDownTimer that will display the time formatted to your days, hours, minutes, and seconds all in a TextView:

    public class Example extends Activity {
        CountDownTimer mCountDownTimer;
        long mInitialTime = DateUtils.DAY_IN_MILLIS * 2 + 
                            DateUtils.HOUR_IN_MILLIS * 9 +
                            DateUtils.MINUTE_IN_MILLIS * 3 + 
                            DateUtils.SECOND_IN_MILLIS * 42;
        TextView mTextView;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            mTextView = (TextView) findViewById(R.id.empty);
    
            mCountDownTimer = new CountDownTimer(mInitialTime, 1000) {
                StringBuilder time = new StringBuilder();
                @Override
                public void onFinish() {
                    mTextView.setText(DateUtils.formatElapsedTime(0));
                    //mTextView.setText("Times Up!");
                }
    
                @Override
                public void onTick(long millisUntilFinished) {
                    time.setLength(0);
                     // Use days if appropriate
                    if(millisUntilFinished > DateUtils.DAY_IN_MILLIS) {
                        long count = millisUntilFinished / DateUtils.DAY_IN_MILLIS;
                        if(count > 1)
                            time.append(count).append(" days ");
                        else
                            time.append(count).append(" day ");
    
                        millisUntilFinished %= DateUtils.DAY_IN_MILLIS;
                    }
    
                    time.append(DateUtils.formatElapsedTime(Math.round(millisUntilFinished / 1000d)));
                    mTextView.setText(time.toString());
                }
            }.start();
        }
    }
    
    0 讨论(0)
  • 2020-12-14 12:03

    Take a look at this post, I think it will help you out: How to check day in android?

    Using the java.util.Calendar class, I think you should be able to figure out how to do the rest.

    http://developer.android.com/reference/java/util/Date.html -- you can use the getDate(), getHours(), getMinutes(), getSeconds(), etc... Hope that helps!

    0 讨论(0)
  • 2020-12-14 12:09

    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);
        }
    }
    
        }
    
    0 讨论(0)
  • 2020-12-14 12:10

    long startTime;

    private void start_countdown_timer()
    {
        SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
        formatter.setLenient(false);
    
    
        String endTime = "18.09.2017, 15:05:36";
        long milliseconds=0;
    
        final CountDownTimer mCountDownTimer;
    
        Date endDate;
        try {
            endDate = formatter.parse(endTime);
            milliseconds = endDate.getTime();
    
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        startTime = System.currentTimeMillis();
    
    
        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);
                Log.d("daysLeft",daysLeft);
    
                String hoursLeft = String.format("%d", (serverUptimeSeconds % 86400) / 3600);
                //txtViewHours.setText(hoursLeft);
                Log.d("hoursLeft",hoursLeft);
    
                String minutesLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) / 60);
                //txtViewMinutes.setText(minutesLeft);
                Log.d("minutesLeft",minutesLeft);
    
                String secondsLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) % 60);
                //txtViewSecond.setText(secondsLeft);
                Log.d("secondsLeft",secondsLeft);
    
    
            }
    
            @Override
            public void onFinish() {
    
            }
        }.start();
    
    
    }
    
    0 讨论(0)
  • 2020-12-14 12:11

    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();
    
        }
    
    0 讨论(0)
  • 2020-12-14 12:16

    I have read your question, I have already faced this problem and I made custom code for it without using any third party library.

    Here is Code:

    public class CountDownTimerDaysActivity extends AppCompatActivity {
    
    /*Views declaration*/
    private TextView months_left,weeks_left,daysLeft,hrsLeft,minLeft,secLeft,endDate;
    /*Handler Declaration*/
    private Handler handler;
    /*set End Time for timer */
    private String endDateTime="2019-03-21 10:15:00";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*inflate layout for activity*/
        setContentView(R.layout.activity_count_down_timer);
        /*invoke initView method  for views*/
        initView();
    }
    /*initView method for findviews by id*/
    private void initView() {
        months_left = findViewById(R.id.months_left);
        weeks_left = findViewById(R.id.weeks_left);
        daysLeft = findViewById(R.id.days_left);
        hrsLeft = findViewById(R.id.hrs_left);
        minLeft = findViewById(R.id.min_left);
        secLeft = findViewById(R.id.sec_left);
        endDate = findViewById(R.id.end_date);
        endDate.setText(endDateTime);
        /*invoke countDownStart() method for start count down*/
        countDownStart();
    }
    
    /*countDownStart() method for start count down*/
    public void countDownStart() {
        handler = new Handler();
        Runnable runnable = new Runnable() {
            @SuppressLint("SetTextI18n")
            @Override
            public void run() {
                handler.postDelayed(this, 1000);
                try {
                    @SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    // Please set date in  YYYY-MM-DD hh:mm:ss format
                    /*parse endDateTime in future date*/
                    Date futureDate = dateFormat.parse(endDateTime);
                    Date currentDate = new Date();
                    /*if current date is not comes after future date*/
                    if (!currentDate.after(futureDate)) {
                        long diff = futureDate.getTime()
                                - currentDate.getTime();
    
                        long days = diff / (24 * 60 * 60 * 1000);
                        diff -= days *(24  *60 * 60  *1000);
                        long hours = diff / (60 * 60*  1000);
                        diff -= hours * (60*  60 * 1000);
                        long minutes = diff / (60 * 1000);
                        diff -= minutes * (60  *1000);
                        long seconds = diff / 1000;
                        @SuppressLint("DefaultLocale") String dayLeft = "" + String.format("%02d", days);
                        @SuppressLint("DefaultLocale") String hrLeft = "" + String.format("%02d", hours);
                        @SuppressLint("DefaultLocale") String minsLeft = "" + String.format("%02d", minutes);
                        @SuppressLint("DefaultLocale") String secondLeft = "" + String.format("%02d", seconds);
                        daysLeft.setText(dayLeft + "D: ");
                        hrsLeft.setText(hrLeft + "H: ");
                        minLeft.setText(minsLeft + "M: ");
                        secLeft.setText(secondLeft + "S");
    
                    } else {
                        textViewGone();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        handler.postDelayed(runnable, 1000);
    }
    private void textViewGone() {
        months_left.setVisibility(View.GONE);
        weeks_left.setVisibility(View.GONE);
        daysLeft.setVisibility(View.GONE);
        hrsLeft.setVisibility(View.GONE);
        minLeft.setVisibility(View.GONE);
        secLeft.setVisibility(View.GONE);
    }
    }
    

    I hope its work for you

    0 讨论(0)
提交回复
热议问题