Java 日历指定周将继续重置

Java 日历指定周将继续重置,java,android,calendar,Java,Android,Calendar,我有一个函数可以返回特定星期的所有日期 SimpleDateFormat sdf = new SimpleDateFormat("dd.MM"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.WEEK_OF_YEAR, week); String[] dates = new String[7]; currentlySelectedYear = String.valueOf(Calendar.getInstance().get(C

我有一个函数可以返回特定星期的所有日期

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.WEEK_OF_YEAR, week);
String[] dates = new String[7];
currentlySelectedYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
// i = 2 because MONDAY is day two in week
for (int i = 2; i < 9; i++) {
    cal.set(Calendar.DAY_OF_WEEK, i);
    //i-2 to start the array at index 0
    dates[i - 2] = sdf.format(cal.getTime());
}
SimpleDateFormat sdf=新的SimpleDateFormat(“dd.MM”);
Calendar cal=Calendar.getInstance();
校准设置(日历周/年/周/周);
字符串[]日期=新字符串[7];
currentlySelectedYear=String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
//i=2,因为周一是一周中的第二天
对于(int i=2;i<9;i++){
校准设置(日历日/周,i);
//i-2在索引0处启动数组
dates[i-2]=sdf.format(cal.getTime());
}
它在除三星外的所有设备上都能正常工作,三星在第一次迭代后再次输入for循环,日历中的WEEK_OF_YEAR字段将重置为当前周,而不是上面三行设置的周

这是三星的已知错误还是我遗漏了什么


是否有其他方法可以在所有设备上执行相同的操作?

没有任何一种
周中日
具有值
8
。可能的解决方法:将
年中周
设置在循环内部,而不是循环之前。好的解决方案:开始使用JSR-310,这是现代Java日期和时间API,也称为
Java.time
,而不是过时的
SimpleDataFormat
Calendar
。现代API使用起来非常好。@OleV.V。是的,我测试过的三种不同三星设备上的所有值都会出现这种情况。在所有其他设备上,它都能完美地工作。Thx代表ThreeTenABP的建议。我会试试的,希望你会喜欢ThreeTenABP。在《奥列夫·V》一书中,有一个关于如何进行的详尽解释。@OleV.V.《宽大的日历》不会抱怨,这是真的。但是,我不确定它在这些情况下是否正常工作。当然,鉴于三星存在问题,他们显然使用了一些表现不好的Calendar类版本。我还投票支持基本上所有使用datetime计算的应用程序代码,而不仅仅是“给我当前系统时间”转换成JSR-310之类的东西。没有这样的
DAY\u of u of u WEEK
8
。可能的解决方法:在循环内而不是在循环前设置
WEEK\u of u of u YEAR
。好的解决方案:开始使用JSR-310,这是现代Java日期和时间API,也称为
Java.time
,而不是过时的
SimpleDataFormat
Calendar
。现代API使用起来非常好。@OleV.V。是的,我测试过的三种不同三星设备上的所有值都会出现这种情况。在所有其他设备上,它都能完美地工作。Thx代表ThreeTenABP的建议。我会试试的,希望你会喜欢ThreeTenABP。在《奥列夫·V》一书中,有一个关于如何进行的详尽解释。@OleV.V.《宽大的日历》不会抱怨,这是真的。但是,我不确定它在这些情况下是否正常工作。当然,鉴于三星存在问题,他们显然使用了一些表现不好的Calendar类版本。我还投票支持将所有使用datetime计算的应用程序代码转换为JSR-310格式,而不仅仅是“获取当前系统时间”。