Android java.util.concurrent.TimeUnit Convert Milliseconds to Minutes
I believe TimeUnit might have added minutes in 1.6: 1.6 docs, 1.5 docs
How to convert Milliseconds to X mins, x seconds in Java?
Use the java.util.concurrent.TimeUnit
class:
String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
Note: TimeUnit
is part of the Java 1.5 specification, but toMinutes
was added as of Java 1.6.
To add a leading zero for values 0-9, just do:
String.format("%02d min, %02d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
If TimeUnit
or toMinutes
are unsupported (such as on Android before API version 9), use the following equations:
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
//etc...
How to convert milliseconds to hh:mm:ss format?
You were really close:
String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), // The change is in this line
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
You were converting hours to millisseconds using minutes instead of hours.
BTW, I like your use of the TimeUnit
API :)
Here's some test code:
public static void main(String[] args) throws ParseException {
long millis = 3600000;
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)));
System.out.println(hms);
}
Output:
01:00:00
I realised that my code above can be greatly simplified by using a modulus division instead of subtraction:
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1),
TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));
Still using the TimeUnit
API for all magic values, and gives exactly the same output.
From milliseconds to hour, minutes, seconds and milliseconds
Here is how I would do it in Java:
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
Override androids implementation of TimeUnit
You are not likely to find a solution. Even if you could override the built in TimeUnits class (I don't believe you can) you would have no way to feed the new one into your library and get it to work.
In normal java you could replace the classloader before loading the library but that would be a really bad (and difficult) solution anyway.
If your library is open-source or if you own it, I'd recommend fixing it and rebuilding--seems pretty straight-forward. If you submit a patch and tell them why then it should automatically be included in future versions.
If you don't own it, you have to get the person or group who does to rebuild it (This is the reason old-school programmers hate closed source, even if you are willing to do it yourself, you are often completely blocked).
How to convert milliseconds into hours and days?
The code below does the math you need and builds the resulting string:
private static final int SECOND = 1000;
private static final int MINUTE = 60 * SECOND;
private static final int HOUR = 60 * MINUTE;
private static final int DAY = 24 * HOUR;
// TODO: this is the value in ms
long ms = 10304004543l;
StringBuffer text = new StringBuffer("");
if (ms > DAY) {
text.append(ms / DAY).append(" days ");
ms %= DAY;
}
if (ms > HOUR) {
text.append(ms / HOUR).append(" hours ");
ms %= HOUR;
}
if (ms > MINUTE) {
text.append(ms / MINUTE).append(" minutes ");
ms %= MINUTE;
}
if (ms > SECOND) {
text.append(ms / SECOND).append(" seconds ");
ms %= SECOND;
}
text.append(ms + " ms");
System.out.println(text.toString());
how to show milliseconds in days:hours:min:seconds
A simple way to calculate the time is to use something like
long seconds = timeInMilliSeconds / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
String time = days + ":" + hours % 24 + ":" + minutes % 60 + ":" + seconds % 60;
This will work if you have more than 28 days, but not if you have a negative time.
Related Topics
How to Use Asynctask to Display a Progress Bar That Counts Down
Single Click and Double Click of a Button in Android
How to Call Stopservice() Method of Service Class from the Calling Activity Class
Wallpaper Not Properly Fit on Device Screen
The Specified Child Already Has a Parent. You Must Call Removeview() on the Child's Parent First
Is Deprecated Word the Only Difference Between Fill_Parent and Match_Parent
How to Parse the CSV File in Android Application
Broadcast Receiver Not Working in Android Oreo
How to Restrict Content Provider Data Across Applications
Masked Input Using Edittext Widget in Android
Get Bluetooth Local MAC Address in Marshmallow
Why Can't One Add/Remove Items from an Arrayadapter
Checking My App Version Programmatically in Android Market
Get Last Inserted Value from SQLite Database Android
Should Use "Sp" Instead of "Dp" for Text Sizes
How to Setup Appium in Ubuntu for Android
Android - Nestedscrollview Which Contains Expandablelistview Doesn't Scroll When Expanded