public static String displayTime(int n) {
if (n < 0) {
return "Unknown";
} else if (n < 50) {
// Below 50s: 1s, 2s, ... up from 2%
return "~ " + n + " s";
} else if (n < = 5*SEC_PER_MIN) {
// From 50s to 5m: 1m 10s, 1m 20s, ... down from 20% to 3.3%
int min = n / SEC_PER_MIN;
int sec = ((n%SEC_PER_MIN) / 10) * 10;
if (sec >0)
return "" + min + " m " + sec + " s";
else
return "" + min + " m";
} else if (n < = 20*SEC_PER_MIN) {
// From 5 to 20 minutes: 1m, 2m... down from 20% to 5%
int min = (n+SEC_PER_MIN/2) / SEC_PER_MIN;
return "~ " + min + " m";
} else if (n < = SEC_PER_HOUR) {
// From 20 minutes to 1 hour : 5m; 10m, ... down from 25% to 8.4%
int min = ((n+SEC_PER_MIN/2) / SEC_PER_MIN / 5) * 5;
return "~ " + min + " m";
} else if (n < 5*SEC_PER_HOUR) {
// From 1 to 5 hour: 1h 10m, 1h 20m, ... down from 17% to 3.3%
int hours = n / SEC_PER_HOUR;
int min = (((n%SEC_PER_HOUR)+SEC_PER_MIN/2) / SEC_PER_MIN / 10) * 10;
if (min >0)
return "" + hours + " h " + min + " m";
else
return "" + hours + " h";
} else if (n < = SEC_PER_DAY) {
// From 5 to 24 hours: 1h, 2h, ... down from 20% to 4%
int hours = (n+SEC_PER_HOUR/2) / SEC_PER_HOUR;
return "" + hours + " h";
} else if (n < 5*SEC_PER_DAY) {
// From 1 to 5 days: 2d 4h, 2d 8h, ... down from 17% up to 3.3%
int days = n / SEC_PER_DAY;
int hours = (((n%SEC_PER_DAY)+SEC_PER_HOUR/2) / SEC_PER_HOUR / 4) * 4;
if (hours >0)
return "" + days + " d " + hours + " h";
else
return "" + days + " d";
} else {
// Above 5 days: 5 d, 6 d, ... down from 20% to 0%
int days = (n+SEC_PER_DAY/2) / SEC_PER_DAY;
return "" + days + " d";
}
}
Tries to display an approximation of 10%, always between 5% and 20% |