quick question.
Is there a smarter/sleeker way to convert minutes into a more readable format, showing only the most significant digit?
I'm using Android Studio's Java.
public String MinutesToHumanReadable(Long minutes) {
...
}
ie
2 mins = "2 mins"
45 mins = "45 mins"
60 mins = ">1 hr"
85 mins = ">1 hr"
120 mins = ">2 hrs"
200 mins = ">3 hrs"
1500 mins = ">1 day"
My code is very cumbersome, sloppy, and somewhat unreadable.
public String MinutesToHumanReadable(long minutes) {
String sReturn = "";
if (minutes > 515600) {
sReturn = "> 1 yr";
} else if (minutes > 43200) {
sReturn = (minutes / 43200) + " mths";
} else if (minutes > 10080) {
sReturn = (minutes / 10080) + " wks";
} else if (minutes > 1440) {
sReturn = (minutes / 1440) + " days";
} else if (minutes > 60) {
sReturn = (minutes / 60) + " hrs";
} else {
//<60
sReturn = minutes + " mins";
}
return sReturn;
}
Many thanks, J
Well it is possible, I figure it out and I am proud of it! :) Note that you can easily add any other value without changing the method itself, only by changing values in these two arrays. For example, if "years" are not enough for you, you can add "decades" and "centuries"...
This code also adding "s" letter at the end, if you have more than 1 of output value.
public class SuperMinutesChangerClass {
public static int[] barriers = {1, 60, 60*24, 60*24*7, 60*24*365, Integer.MAX_VALUE};
public static String[] text = {"min", "hr", "day", "week", "year"};
public static String minutesToHumanReadable(int minutes){
String toReturn = "";
for (int i = 1; i < barriers.length; i++) {
if (minutes < barriers[i]){
int ammount = (minutes/barriers[i-1]);
toReturn = ">" + (ammount) + " " + text[i-1];
if (ammount > 1){
toReturn += "s";
}
break;
}
}
return toReturn;
}
}
Sample input :
public static void main(String[] args) {
System.out.println(minutesToHumanReadable(10));
System.out.println(minutesToHumanReadable(60));
System.out.println(minutesToHumanReadable(61));
System.out.println(minutesToHumanReadable(121));
System.out.println(minutesToHumanReadable(8887));
System.out.println(minutesToHumanReadable(9999743));
}
Output is :
>10 mins
>1 hr
>1 hr
>2 hrs
>6 days
>19 years
I would use some dummy if/else if/else
statements :
public static String convert(int minutes) {
if(minutes < 60) {
return String.format("%d mins", minutes);
} else if(minutes < 1440) { //1 day = 1440 minutes
return String.format("%d hrs, %d mins", minutes/60, minutes%60);
} else {
return String.format("%d days", minutes / 1440);
}
}
Test
System.out.println(convert(84));
Output :
1 hrs, 24 mins
maybe this helps you
private static final int MINUTES_PER_HOUR = 60;
private static final int MINUTES_PER_DAY = MINUTES_PER_HOUR * 24;
public String minutesToHumanReadable(long minutes) {
if (minutes > MINUTES_PER_DAY) {
return String.format("> %d days", minutes / MINUTES_PER_DAY);
} else if (minutes > MINUTES_PER_HOUR) {
return String.format("> %d hours", minutes / MINUTES_PER_HOUR);
}
return String.format("%d minutes", minutes);
}
Improving answer by Joshua Pinter and Arnaud Denoyelle.
fun convertMinutesToHumanReadable(minutes: Int, context: Context): String {
return if (minutes < 60) {
"$minutes ${context.resources.getQuantityString(R.plurals.minutes_abbrev, minutes)}"
} else if (minutes % 60 == 0 && minutes < 1440) {
val hours1 = minutes / 60
"$hours1 ${context.resources.getQuantityString(R.plurals.hours_abbrev, hours1)}"
} else if (minutes < 1440) {
val hours1 = minutes / 60
val minutes1 = minutes % 60
"$hours1 ${
context.resources.getQuantityString(
R.plurals.hours_abbrev, hours1
)
}, $minutes1 ${
context.resources.getQuantityString(
R.plurals.minutes_abbrev, minutes1
)
} "
} else if (minutes % 1440 == 0) {
val days1 = minutes / 1440
"$days1 ${context.resources.getQuantityString(R.plurals.days, days1)}"
} else {
val days1 = minutes / 1440
"$days1 ${context.resources.getQuantityString(R.plurals.days, days1)}, ".plus(
convertMinutesHumanReadable(minutes % 1440, context)
)
}
}
And add this to res/values/strings.xml file
<plurals name="minutes_abbrev">
<item quantity="one">min</item>
<item quantity="other">mins</item>
</plurals>
<plurals name="hours_abbrev">
<item quantity="one">hr</item>
<item quantity="other">hrs</item>
</plurals>
<plurals name="days">
<item quantity="one">day</item>
<item quantity="other">days</item>
</plurals>
In this way it will show singular or plural depending on the amount and also supports values larger than one day. For example: 2 days, 8 hrs, 23 mins or 1 day, 2 hrs, 1 min
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.