#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()
Комментариев нет:
Отправить комментарий