Добавление времени к текущему времени дает ошибку в 1 минуту (Kotlin / Java) - PullRequest
0 голосов
/ 04 февраля 2019

Когда я добавляю новое время в экземпляр календаря, это дает мне ошибку в 1 минуту.

Я получаю время от ответа API в этом формате

"PredictedArrivalDateTime": "/Date(1549309800000+1100)/"

это просто фиктивная дата из моего ответа API

Затем я использую функцию dateFromDotNetDate(dotNetDate: String), чтобы получить разницу в минутах.

После этого я хочу добавить эти минутык текущему времени (например, 12:30) и получить новое время, которое я делаю, используя следующую функцию calculateNextTime(diffInMillies: Long)

Ниже приведен мой код утилиты DateTimeUtil

class DateTimeUtil {

    //Holds difference time difference in Minuets
    var mDifferenceMin: String? = null

    //HoldsETA of next Tram
    var mNextTime: String? = null

    //Convert .NET Date to Date
    fun dateFromDotNetDate(dotNetDate: String) {
        val startIndex = dotNetDate.indexOf("(") + 1
        val endIndex = dotNetDate.indexOf("+")
        val date = dotNetDate.substring(startIndex, endIndex)

        val unixTime = java.lang.Long.parseLong(date)
        val diffInMinutes = calculateDifference(Date(), unixTime)

        mDifferenceMin = diffInMinutes
        //----------------
        if (diffInMinutes == "0") {
            mDifferenceMin = "Now"
        } else
            mDifferenceMin = diffInMinutes
    }

    private fun calculateDifference(d1: Date, d2: Long): String? {
        val diffInMillies = Math.abs(d2 - d1.time)
        val diff = TimeUnit.MINUTES.convert(diffInMillies, TimeUnit.MILLISECONDS)

        calculateNextTime(diffInMillies)
        //----------------------
        return diff.toString()
    }

    private fun calculateNextTime(diffInMillies: Long) {
        //calculate next time
        val df = SimpleDateFormat("hh:mm aa", Locale.getDefault())
        val now = Calendar.getInstance()
        now.add(Calendar.MILLISECOND, diffInMillies.toInt())
        val teenMinutesFromNow = df.format(now.time)
        val nextTime = teenMinutesFromNow

        mNextTime = nextTime
    }
}

See Attached screensot

Текущее время в устройстве - 12:41, следующее время ETA - 18 минут, поэтому, если я добавлю (12:41 + 18 минут = 12:59), но отобразится 1: 00

1 Ответ

0 голосов
/ 04 февраля 2019

Я просто изменил одну строку, и волшебство произошло

с

now.add(Calendar.MILLISECOND, diffInMillies.toInt())

до

now.add(Calendar.MINUTE, diffInMin.toInt())

Как я думал, вычисление MILLISECOND приводило к ошибкам в моей функции, когдаЯ рассчитал с помощью минут, он работает нормально

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