日历集WEEK_OF_YEAR无法正常运行

时间:2017-10-12 19:39:34

标签: java android calendar

我已经构建了一个函数来返回一个日期(作为字符串),提供周数和日期。

我的功能在我的设备上完美运行(LineageOS android 7.1.2下的三星Galaxy S6),但是我的一个朋友,使用另一个Android设备(android 5.1.x,这就是我所知道的),报告我一个错误:该函数返回他当前周(调用函数的实时周)的日期,无论他给出的周数。

为了不打扰我的朋友,我正在使用具有相同问题的模拟器。这是Android studio中的默认设置(Emulator Nexus_5_API_23 android 6.0)。

这是我的功能:

public static String getDayString(int weekNumber, int dayPosition) {
    DateFormat sdf = DateFormat.getDateInstance();
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
    cal.set(Calendar.DAY_OF_WEEK, dayPosition + 2);
    return sdf.format(cal.getTime());
}

在我第一次尝试理解这个问题时,我发现了cal.set(Calendar.WEEK_OF_YEAR,weekNumber);没用。

然后我推出了Log.d(“ClassName”,String.valueOf(cal.get(Calendar.WEEK_OF_YEAR)));查看周数是否从当前周数(由getInstance()设置)正确更改为所需的周数(weekNumber)。但问题消失了,功能完美地运作了......

当我放入cal.get(Calendar.WEEK_OF_YEAR)时,结果是;在cal.set之后(Calendar.WEEK_OF_YEAR,weekNumber);周数更新但单独的cal.set(...)不起作用。

这是我的“固定”功能:

public static String getDayString(int weekNumber, int dayPosition) {
    DateFormat sdf = DateFormat.getDateInstance();
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
    cal.get(Calendar.WEEK_OF_YEAR);
    cal.set(Calendar.DAY_OF_WEEK, dayPosition + 2);
    return sdf.format(cal.getTime());
}

我对此结果感到非常惊讶和困惑。 cal.get(...)如何改变任何东西?我怎么能找到解决这个“问题”的另一种方法? cal.set(...)方法有什么问题?我做错了什么或者我错过了什么?

这种奇怪的“量子观察者效应”问题似乎并不存在于Java中。但仅限于某些(并非所有)Android设备。

0 个答案:

没有答案