Countdowntimer in minutes and seconds
http://developer.android.com/reference/android/os/CountDownTimer.html
TextView _tv = (TextView) findViewById( R.id.textView1 );
new CountDownTimer(30000, 1000) { // adjust the milli seconds here
public void onTick(long millisUntilFinished) {
_tv.setText(""+String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
_tv.setText("done!");
}
}.start();
Since java 1.5 there is the java.util.concurrent.TimeUnit class
_tv.setText(""+String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html
A TimeUnit represents time durations at a given unit of granularity and provides utility methods to convert across units, and to perform timing and delay operations in these units.
For Java versions below 1.5 or for systems that do not fully support the TimeUnit class the following equations can be used:
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
To vibrate
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
v.vibrate(500);
<uses-permission android:name="android.permission.VIBRATE"/> // permission in manifest
Edit:
Vibrate at 4 min 55 seconds for 500 milli seconds
if((TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished)==4) &&
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))==55)
{
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
v.vibrate(500);
}
How to display minutes and seconds in countdowntimer
Try this
String text = String.format(Locale.getDefault(), "Time Remaining %02d min: %02d sec",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60);
tvTime.setText(text);
How to Show Countdown timer in HH:MM:SS (Hours : Minutes : Seconds)
It's helpful for you
private void startTimer(int noOfMinutes) {
CountDownTimer countDownTimer = new CountDownTimer(noOfMinutes, 1000) {
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
//Convert milliseconds into hour,minute and seconds
String hms = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
countdownTimerText.setText(hms);//set text
}
public void onFinish() {
countdownTimerText.setText("TIME'S UP!!"); //On finish change timer text
}
}.start();
Edited
//1584700200 is timestamp in milii seconds (Friday, March 20, 2020 10:30:00 AM)
//1000(1sec) is time interval to call onTick method
new CountDownTimer(1584700200, 1000){
@Override
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
String hms = String.format("%02d:%02d:%02d:%02d",
TimeUnit.HOURS.toDays(TimeUnit.MILLISECONDS.toHours(millis)),
(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))));
countdownTimerText.setText(hms);//set text
}
@Override
public void onFinish() {
/*clearing all fields and displaying countdown finished message */
countdownTimerText.setText("Count down completed");
}
}.start();
}
Kotlin
private fun countDown() {
val countDownTimer = object : CountDownTimer(1584700200, 1000) {
override fun onTick(p0: Long) {
val millis: Long = p0
val hms = String.format(
"%02d:%02d:%02d:%02d",
TimeUnit.HOURS.toDays(TimeUnit.MILLISECONDS.toDays(millis)),
(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)
))
)
System.out.println("Time : " + hms)
countdownTimerText.setText(hms);//set text
}
override fun onFinish() {
/*clearing all fields and displaying countdown finished message */
countdownTimerText.setText("Count down completed");
System.out.println("Time up")
}
}
countDownTimer.start()
}
How to change this countdown timer into minutes and seconds?
One minute = total / 60.
Seconds = total % 60.
Add 0 if minutes or seconds below 10.
Just add this calculations before adding to html.
var test = 3600;
$('button').click(function(){
if (localStorage.getItem("counter")) {
if (localStorage.getItem("counter") <= 0) {
var value = test;
}
else {
var value = localStorage.getItem("counter");
}
}
else {
var value = test;
}
$('#divCounter').text(value);
var counter = function() {
if (value == 0) {
localStorage.setItem("counter", test);
value = 0;
}
else {
value = parseInt(value) - 1;
localStorage.setItem("counter", value);
}
var minutes = Math.floor(value / 60)
var seconds = value % 60
if (minutes<10) minutes = '0'+minutes
if (seconds<10) seconds = '0'+seconds
$('#divCounter').text(minutes+':'+seconds);
};
var interval = setInterval(function() { counter(); }, 1000);
});
Java countdown timer minutes and seconds
You need to display remaining number of second i
in format mimutes:seconds
format. If you assume that there are always 60 seconds in a minute:
String time = String.format("%02d:%02d", i / 60, i % 60);
System.out.println(time);
ASP.NET countdown timer (hours, minutes, seconds)
Ok, so how to do this?
Well, we can do 100% server side code - great if you stuck - don't know JavaScript
So, say we drop in 3 labels
Drop in 3 text boxes.
Drop in a timer control.
Drop in 4 buttons - (see later how we use them).
we have this:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div style="width:350px;padding:20px">
<div style="margin:auto">
<div style="float:left">
<asp:Label ID="lblHours" runat="server" Text="Hours" Font-Size="Larger" ClientIDMode="Static"></asp:Label>
<br />
<asp:TextBox ID="txtHours" runat="server" Text="0" ClientIDMode="Static" CssClass="tbox"></asp:TextBox>
</div>
<div style="float:left;margin-left:20px">
<asp:Label ID="lblMin" runat="server" Text="Minutes" Font-Size="Larger"></asp:Label>
<br />
<asp:TextBox ID="txtMin" runat="server" Text="0" CssClass="tbox" ClientIDMode="Static"></asp:TextBox>
</div>
<div style="float:left;margin-left:15px">
<asp:Label ID="lblsec" runat="server" Text="Seconds" Font-Size="Larger"></asp:Label>
<br />
<asp:TextBox ID="txtSec" runat="server" BorderStyle="Solid" Text="5" CssClass="tbox" ClientIDMode="Static" ></asp:TextBox>
</div>
<div style="clear:both;height:15px"></div>
<div style="margin:auto">
<asp:Button ID="cmdStart" runat="server" Text="Start" />
<asp:Button ID="cmdStop" runat="server" Text="Stop" style="margin-left:20px" />
<asp:Button ID="cmdStartJS" runat="server" Text="Start JS" style="margin-left:20px"
OnClientClick="mystart();return false" />
<asp:Button ID="cmdStopJS" runat="server" Text="Stop JS" style="margin-left:20px"
OnClientClick="mystop();return false"/>
<br />
<asp:Label ID="lblDone" runat="server" Text="" ClientIDMode="Static"></asp:Label>
</div>
</div>
</div>
<asp:Timer ID="Timer1" runat="server"></asp:Timer>
And our code will look like this:
Protected Sub cmdStart_Click(sender As Object, e As EventArgs) Handles cmdStart.Click
' take entered values - convert to time
Dim MyTime As DateTime
MyTime = TimeSerial(txtHours.Text, txtMin.Text, txtSec.Text)
' save time value
ViewState("MyTime") = MyTime
Timer1.Interval = 1000 ' upddate every one second
Timer1.Enabled = True ' start the timer.
lblDone.Text = "Started"
End Sub
Protected Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim myTime As DateTime = ViewState("MyTime")
' check if we are to stop
If myTime <= TimeSerial(0, 0, 0) Then
Timer1.Enabled = False ' turn off timer
' do whatever for end of timer
lblDone.Text = "Done!"
Exit Sub
End If
Dim OneSecond As TimeSpan = TimeSpan.FromSeconds(1)
myTime = myTime - OneSecond
' update text boxes
txtHours.Text = myTime.Hour
txtMin.Text = myTime.Minute
txtSec.Text = myTime.Second
ViewState("MyTime") = myTime
End Sub
Protected Sub cmdStop_Click(sender As Object, e As EventArgs) Handles cmdStop.Click
Timer1.Enabled = False
End Sub
Output:
So the above is very similar to say desktop approach. (and like on desktop, we even dropped in that timer control).
The downside of course is this means a post-back for each 1 second.
But, we could surround the above markup with a update-panel - and it would be and look butter smooth.
The 2nd way:
100% Client side code.
So, with the above page, lets write the JavaScript code for the "js buttons"
We have this (I do assume this page has use of jQuery - but that's quite much assumed these days).
<script>
MyTime = new Date(0,0,0,0,0,0)
TimeZero = new Date(0,0,0,0,0,0)
MyTimer = 0
tH = $("#txtHours")
tM = $("#txtMin")
tS = $("#txtSec")
function mystart() {
MyTime.setHours(tH.val())
MyTime.setMinutes(tM.val())
MyTime.setSeconds(tS.val())
if (MyTime > TimeZero) {
MyTimer = setInterval(mytic,1000)
$("#lblDone").text("Start")
}
}
function mytic() {
MyTime.setSeconds(MyTime.getSeconds() - 1)
tH.val(MyTime.getHours())
tM.val(MyTime.getMinutes())
tS.val(MyTime.getSeconds())
if (MyTime <= TimeZero) {
clearInterval(MyTimer)
$("#lblDone").text("Done !!!")
}
}
function mystop() {
clearInterval(MyTimer)
}
</script>
So both the JavaScript, or the server side code does quite much the same thing.
The major difference you note is that the client side code?
It never hits the server side, and thus looks quite a bit smoother.
Countdown Timer every 15-Minutes in the hour
That solution seems overly complicated and you should be definitely using setInterval
for a task where you have to update something every x seconds, recursively calling setTimeout
is a bad idea. Here is a solution that is much more understandable:
const runEvery = 15 * 60; // 15 minutes in seconds
const showRemaining = () => {
// get current time in seconds and find when the next run starts in seconds
const seconds = Math.round(Date.now() / 1000);
const nextRun = runEvery * Math.ceil(seconds / runEvery);
const timeLeft = nextRun - seconds;
const minutesLeft = Math.floor(timeLeft / 60);
const secondsLeft = timeLeft % 60;
document.getElementById('clock').textContent = minutesLeft + ':' + ('0' + secondsLeft).slice(-2);
}
showRemaining();
setInterval(showRemaining, 1000);
<div id="clock"></div>
How can I make a timer that shows minutes and seconds?
Firstly You have to change time in hour and minute.
minutes = (totalSecond % 3600) / 60
seconds = (totalSecond % 3600) % 60
After that you have to change in Hour:Minute format.
timeView1.text = String(format: "%02d:%02d",minutes,seconds)
Related Topics
Failed to Run Sdkmanager --List with Java 9
How Can One Detect Airplane Mode on Android
How to Escape % in String.Format
Android "Gps Requires Access_Fine_Location" Error, Even Though My Manifest File Contains This
How to Change a Textview's Style at Runtime
Keep Broadcast Receiver Running After Application Is Closed
Retrofit Expected Begin_Object But Was Begin_Array
Javax.* Cannot Be Imported in My Android App
Change Background Color of Single Specific Menu Items of Navigationview
Gradle - What Is a Non-Zero Exit Value and How to Fix It
Getting Noclassdeffounderror When Using Common.Lang.Stringutils in Android Java Code
Listview Is Blank While Using Getfilter Function
Android: How to Stretch an Image to the Screen Width While Maintaining Aspect Ratio
How to Set Timeout in Retrofit Library
Garbage Collector Log (Loggc) File Rotation with Logrotate Does Not Work Properly