Как сравнить две даты на разницу между ними в шесть месяцев? (котлин, андроид)
Есть data1 и data2. Нужно просто сравнить на true или false разницу между ними в 6 месяцев (а не например в 182 дня). И если эта разница составляет менее шести месяцев - то выполнить функцию. Что-то вроде
fun sidSixMounts_E(): Boolean {
val periodSixMounts = Period.between(data1, date2)
when (periodSixMounts.toString().equals("P6M")) {
true -> return true
false -> return false
}
}
или
fun sidSixMounts(): Boolean {
val periodSixMounts = Period.between(data1, date2)
if (periodSixMounts.toString() == "P6M") return true
else return false
}
Пока не могу проверить, не за компьютером. Если оба варианта рабочие - какой лучше?
Ответы (1 шт):
Для работы с периодами следует учесть, что внутри они не являются строками, а хранят числовые значения, которые куда удобнее сравнивать.
Возьмем Ваш первоначальный код:
fun sidSixMounts_E(): Boolean {
val periodSixMounts = Period.between(data1, date2)
when (periodSixMounts.toString().equals("P6M")) {
true -> return true
false -> return false
}
}
Сравнение можно переписать следующим образом:
when (periodSixMounts.months == 6)
Так как нужно не сравнение на равенство, а проверка на меньше, то еще раз изменим строку:
when (periodSixMounts.months < 6)
Учтем, что период бывает как положительный, так и отрицательный (в зависимости от порядка дат):
when (periodSixMounts.months.absoluteValue < 6)
Ну и помимо сути вопроса добавлю, что в таких случаях, когда внутри when стоит логическое выражение, лучше применять if. Код получается намного короче и понятнее при чтении.
В данном случае и вовсе можно вернуть само логическое выражение
Итоговый вариант:
fun sidSixMounts_E(): Boolean {
val periodSixMounts = Period.between(data1, date2)
return periodSixMounts.months.absoluteValue < 6
}