【问题标题】:Calendar.set(..) not working on android 6.0Calendar.set(..) 在 android 6.0 上不起作用
【发布时间】:2019-04-20 10:31:33
【问题描述】:

我需要将日历设置为下周的星期一。我的代码在 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周吗? Calendar 类设计不佳且早已过时。使用现代 Java 日期和时间 API java.time,以获得更简单、更自然的代码或更容易预测的行为。

标签: java android android-6.0-marshmallow


【解决方案1】:

遗憾的是,要在 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()

对不起 Kotlin。 Java 正在休假。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多