java - Calendar.set(..) not working on android 6.0
问题描述
I need to set calendar to next week's monday. My code works on Android 9.0 but on Android 6.0 it works only while debugging.
Problem is with Calendar.set(..) functions, they just don't work. For example calendar.set(Calendar.WEEK_OF_YEAR, 17) won't change calendar week to 17, but when it is debugging it will change it to 17.
Here is my code:
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 shows 17
Android 6.0 weekNumberTv shows 16
If start debugging mode
Android 6.0 weekNumberTv shows 17
解决方案
To do time calculations in versions prior to 7.0 sadly you will have to use JavaTime package or its backport.
Implement ThreeTen Android Backport library:
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.0'
https://github.com/JakeWharton/ThreeTenABP
Then initialize it in onCreate method.
AndroidThreeTen.init(this)
Make sure that these libraries are included and not Java 8 ones.
import org.threeten.bp.LocalDate
import org.threeten.bp.temporal.ChronoUnit
import org.threeten.bp.temporal.WeekFields
import com.jakewharton.threetenabp.AndroidThreeTen
Code to finish work
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()
Sorry for Kotlin. Java is on vacation.
推荐阅读
- jquery - 为您的购物车制作快速查看模式
- firebase - 如何使用 Firebase JS SDK 配置 Firebase Analytics 以支持适用于 Google 广告转化跟踪的跨域跟踪
- npm - npm run build prod 不适用于 UglifyJs
- julia - 找不到 Julia 的 bin 文件夹?
- javascript - 有没有办法在不创建新对象的情况下链接 Javascript 函数?
- .net - 远程主机强制关闭现有连接 - 客户端计算机上的错误
- reactjs - 组件状态下的组合表单输入值
- android - 从 Firebase 实时数据库 Kotlin 中检索有序数据
- excel - 使用 VLOOKUP 从另一个工作簿中提取数据
- python - 从列中引用索引并添加计数