我正在测试我们的日期管理框架的一部分,该框架应该重置一些Calendar字段(使用实际的minimum)。
然而,当改变周的第一天,日历总是返回SUNDAY(1
)的实际最小为周的一天。是虫子吗?
MVCE:
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.printf("Java specification: %s%n", System.getProperty("java.vm.specification.version"));
System.out.printf("Java version: %s%n", System.getProperty("java.specification.version"));
System.out.printf("VM version: %s%n", System.getProperty("java.vm.version"));
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
int[] days = { 1, 5, 7 };
for (int day : days) {
cal.setTimeInMillis(0L);
cal.setFirstDayOfWeek(day);
System.out.printf("expected: %d, actual: %d%n", day, cal.getActualMinimum(Calendar.DAY_OF_WEEK));
}
}
}
您应该使用cal.getFirstDayOfWeek()来代替cal.getActualMinimum(Calendar.DAY_OF_WEEK)
因为cal.getActualMinimum(Calendar.DAY_OF_WEEK)将始终返回星期日,请查看java源代码中getActualMinimum(Calendar.DAY_OF_WEEK)的实现
public int getActualMinimum(int field) {
if (field == DAY_OF_MONTH) {
GregorianCalendar gc = getNormalizedCalendar();
int year = gc.cdate.getNormalizedYear();
if (year == gregorianCutoverYear || year == gregorianCutoverYearJulian) {
long month1 = getFixedDateMonth1(gc.cdate, gc.calsys.getFixedDate(gc.cdate));
BaseCalendar.Date d = getCalendarDate(month1);
return d.getDayOfMonth();
}
}
return getMinimum(field);
}
而getMinimum是:-
public int getMinimum(int field) {
return MIN_VALUES[field];
}
MIN_VALUES数组定义为:-
static final int MIN_VALUES[] = {
BCE, // ERA
1, // YEAR
JANUARY, // MONTH
1, // WEEK_OF_YEAR
0, // WEEK_OF_MONTH
1, // DAY_OF_MONTH
1, // DAY_OF_YEAR
SUNDAY, // DAY_OF_WEEK
1, // DAY_OF_WEEK_IN_MONTH
AM, // AM_PM
0, // HOUR
0, // HOUR_OF_DAY
0, // MINUTE
0, // SECOND
0, // MILLISECOND
-13*ONE_HOUR, // ZONE_OFFSET (UNIX compatibility)
0 // DST_OFFSET
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句