Calendar.set(..) 不适用于 android 6.0
Calendar.set(..) not working on android 6.0
我需要将日历设置为下周的星期一。我的代码在 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
遗憾的是,要在 7.0 之前的版本中进行时间计算,您将不得不使用 JavaTime 包或其向后移植。
实施 ThreeTen Android 向后移植库:
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()
对 Kotlin 感到抱歉。 Java 正在休假。
我需要将日历设置为下周的星期一。我的代码在 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
遗憾的是,要在 7.0 之前的版本中进行时间计算,您将不得不使用 JavaTime 包或其向后移植。
实施 ThreeTen Android 向后移植库:
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()
对 Kotlin 感到抱歉。 Java 正在休假。