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 days, hours, minutes and seconds until the date I specify with the final variable. The timer then sets the text view to show the user days, hours, minutes and seconds.

Any suggestions on how I could code this?

+7
source share
8 answers

CountDownTimer, which displays the time formatted in hours, minutes, 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); } } } 
+14
source

Try the following:

 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(); } 
+8
source

Here is the built-in Android CountDownTimer that displays the time formatted for your days, hours, minutes, and seconds 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(); } } 
+5
source

Take a look at this post, I think this will help you: How to check the day on an Android phone?

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

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

0
source

Is this software using clean code or AppInventor? Here are the coding resources.

Here's one resource: [ http://w2davids.wordpress.com/simple-countdowntimer-example/†[1]

Second (local) resource: Countdown timer required for Android

0
source

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
source

I read your question, I already ran into this problem, and I made my own code for it without using a third-party library.

Here is the 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 his work is for you

0
source

public class DemotimerActivity extends Activity {/ ** Called when the action 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
source

Source: https://habr.com/ru/post/922431/


All Articles