我已经构建了一个函数来返回一个日期(作为字符串),提供周数和日期。
我的功能在我的设备上完美运行(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设备。