Примерное время прибытия - PullRequest
0 голосов
/ 24 марта 2012

Я реализую что-то, что будет отображать ETA, и мне нужна помощь с правильным отображением.

Пример

//calculates the ETA in hours
var eta = CalculateEta(currentLocation, destination); //returns eq. 0,2169067

Как я могу отобразить это в минутах и ​​если ETA больше, чем 1 в часах и минутах?

Пример

Если мое возвращенное значение ETA равно 0,2169067, я бы хотел отобразить его так:

"Estimated Time Of Arrival is in 21 minutes"

Если мое ETA имеет значение 1,502235, я хотел бы отобразить:

"Estimated Time Of Arrival is in 1 hour and 50 minutes"

Надеюсь, это прояснит ситуацию.

1 Ответ

1 голос
/ 24 марта 2012
private static String viaDate(float eta) {
    DateFormat format = new SimpleDateFormat("H 'hours,' m 'minutes,' s 'seconds,' S 'ms'", Locale.US);
    // convert to milliseconds, for some reason substract one hour, 0f results in 1:00
    Date date = new Date((long) (eta * ONE_HOUR) - ONE_HOUR);
    return format.format(date);
}

private static String manual(float eta) {
    int hour = (int) eta;
    eta =  (eta - hour) * 60;
    int minutes = (int) eta;
    eta =  (eta - minutes) * 60;
    int seconds = (int) eta;
    eta =  (eta - seconds) * 1000;
    int ms = (int) eta;
    return String.format("%d hours, %d minutes, %d seconds, %d ms", hour, minutes, seconds, ms);
}

Оба приведут к чему-то вроде

"0 hours, 14 minutes, 2 seconds, 400 ms"

Если вы не хотите отображать часы только при> 0 и отображать «часы» вместо «час» при> 1, тогда возьмитеручная версия добавить немного if (hour > 0) { /* add "x hours" */ } логики

Это может работать и с SimpleDateFormat, но мне было лень искать какие опции форматирования у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...