Calendar.set (..) не работает на Android 6.0 - PullRequest
2 голосов
/ 20 апреля 2019

Мне нужно установить календарь на понедельник следующей недели.Мой код работает на Android 9.0, но на Android 6.0 он работает только во время отладки.

Проблема в функциях Calendar.set (..), они просто не работают.Например, calendar.set (Calendar.WEEK_OF_YEAR, 17) не изменит календарную неделю на 17, но при отладке изменит ее на 17.

Вот мой код:

       Calendar mcurrentTime = Calendar.getInstance(Locale.GERMANY);
        if(AppHelper.getInstance().getNextWeek() != 0){

        mcurrentTime.set(Calendar.WEEK_OF_YEAR, 
        AppHelper.getInstance().getNextWeek());
        mcurrentTime.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        }


  weekNumberTv.setText(mcurrentTime.get(Calendar.WEEK_OF_YEAR)+"");

Android 9.0 weekNumberTv показывает 17

Android 6.0 weekNumberTv показывает 16

Если запустить режим отладки

Android 6.0 weekNumberTv показывает 17

1 Ответ

1 голос
/ 20 апреля 2019

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

Реализация библиотеки ThreeTen Android Backport:

implementation 'com.jakewharton.threetenabp:threetenabp:1.2.0'

https://github.com/JakeWharton/ThreeTenABP

Затем инициализируйте его в методе onCreate.

AndroidThreeTen.init(this)

Убедитесь, что эти библиотеки включены, а не библиотеки Java 8.

import org.threeten.bp.LocalDate
import org.threeten.bp.temporal.ChronoUnit
import org.threeten.bp.temporal.WeekFields
import com.jakewharton.threetenabp.AndroidThreeTen

Код для завершения работы

var mCurrentTime = LocalDate.now()
val weekFields = WeekFields.of(Locale.GERMANY)

val currentDayOfWeek = mCurrentTime.get(weekFields.dayOfWeek())
//subtract day of week to monday
mCurrentTime=mCurrentTime.minus((currentDayOfWeek.toLong()-1),ChronoUnit.DAYS)
//add week starting from monday
mCurrentTime=mCurrentTime.plus(1,ChronoUnit.WEEKS)
//get weekOfYear
val weekOfCurrentTime=mCurrentTime.get(weekFields.weekOfYear())
show_week_in_year.text=weekOfCurrentTime.toString()

Извините за Котлина. Ява в отпуске.

...