Когда я добавляю новое время в экземпляр календаря, это дает мне ошибку в 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
}
}
Текущее время в устройстве - 12:41, следующее время ETA - 18 минут, поэтому, если я добавлю (12:41 + 18 минут = 12:59), но отобразится 1: 00