Как сравнить две даты на разницу между ними в шесть месяцев? (котлин, андроид)

Есть 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 шт):

Автор решения: Alex_Skvortsov

Для работы с периодами следует учесть, что внутри они не являются строками, а хранят числовые значения, которые куда удобнее сравнивать.

Возьмем Ваш первоначальный код:

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
}
→ Ссылка