预计到达时间

时间:2012-03-23 21:42:40

标签: android math

我正在实施一些显示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 个答案:

答案 0 :(得分:1)

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"

如果您不想仅在>时显示小时数当>时,显示“小时”而不是“小时” 1然后拿手动版添加一些if (hour > 0) { /* add "x hours" */ }逻辑

这也适用于SimpleDateFormat,但我懒得查找你的格式选项。