#kotlin
Необходимо работа с датами, например такие операции как:
определить количество недель охватывающих 2 даты
(например 03.11.2019 и 04.11.2019 - 2 недели)
Дату среды на 15 неделе от даты и т.д.
Не подскажите, а то самому не охота реализовывать. На python использовал relativedelta,
может есть что-то подобное на Kotlin. Будет применяться на Android
Попробовал Joda Time, как советовали.
fun differentDatesInWeek(startDate: DateTime, endDate: DateTime) : Int{
return Weeks.weeksBetween(startDate, endDate).weeks
}
Собственно вопрос, почему при выборе дат 03.11.2019 и 04.11.2019 он показывает 0,
а не 2 (или хотя бы 1)?
Или вот так. Решение 2:
var start = DateTime.parse("2019-11-08")
var end = DateTime.parse("2019-11-09")
Log.d("Разница 1", Weeks.weeksBetween(start, end).weeks.toString())
start = DateTime.parse("2019-11-08")
end = DateTime.parse("2019-11-10")
Log.d("Разница 2", Weeks.weeksBetween(start, end).weeks.toString())
Ответ:
2019-11-01 16:36:25.325 22728-22728/ru.ddstudio.schedule D/Разница 1: 0
2019-11-01 16:36:25.327 22728-22728/ru.ddstudio.schedule D/Разница 2: 0
Собственно ответ должен быть разный, так как они лежат в разных неделях. Взял именно
эти данные, чтобы показать что неделя "Американская"
Посмотрел решение с Calendar
Вот код
var calendar = Calendar.getInstance()
calendar.set(2019, 11, 2)
val c1 = calendar.get(Calendar.WEEK_OF_YEAR)
calendar.set(2019, 11, 3)
val c2 = calendar.get(Calendar.WEEK_OF_YEAR)
Log.d("Количество недель с1", (c1).toString())
Log.d("Количество недель с2", (c2).toString())
Log.d("Количество недель", (c2 - c1).toString())
////////////
calendar = Calendar.getInstance()
calendar.set(2019, 11, 3)
val c3 = calendar.get(Calendar.WEEK_OF_YEAR)
calendar.set(2019, 11, 4)
val c4 = calendar.get(Calendar.WEEK_OF_YEAR)
Log.d("Количество недель с3", (c3).toString())
Log.d("Количество недель с4", (c4).toString())
Log.d("Количество недель", (c4 - c3).toString())
Результат:
2019-11-01 16:18:51.726 21282-21282/ru.ddstudio.schedule D/Количество недель с1: 49
2019-11-01 16:18:51.726 21282-21282/ru.ddstudio.schedule D/Количество недель с2: 49
2019-11-01 16:18:51.726 21282-21282/ru.ddstudio.schedule D/Количество недель: 0
2019-11-01 16:18:51.726 21282-21282/ru.ddstudio.schedule D/Количество недель с3: 49
2019-11-01 16:18:51.726 21282-21282/ru.ddstudio.schedule D/Количество недель с4: 49
2019-11-01 16:18:51.726 21282-21282/ru.ddstudio.schedule D/Количество недель: 0
Почему ответ для этих дат одинаков? хотя они находятся в разных неделях
Ответы
Ответ 1
Берете календарь, устанавливаете дату 1, определяете номер недели 1-ой даты и также для 2-ой даты, если они попадают в 1 год, то разница недель+1. Берете дату, добавляете 15 недель - получится искомая дата. Calendar calendar = Calendar.getInstance(); calendar.set( Calendar.MONTH, month1 ); calendar.set( Calendar.DATE, date1 ); calendar.set( Calendar.YEAR, year1 ); calendar.get( Calendar.WEEK_OF_YEAR ); calendar.add( Calendar.WEEK, 15 );Ответ 2
Сейчас стандартом де-факто для работы с датами является либа Joda Time В вашем случае, количество недель между двумя датами в термина Joda будет такая: var weeks = Weeks.weeksBetween(dateTime1, dateTime2).getWeeks()
Комментариев нет:
Отправить комментарий