我正在尝试使用Calendar或Gregorian Calendar来迭代并创建日期网格。然而,他们似乎都认为2010年8月有30天,而9月2日和3月是周末。这就像日历错误的一年,但我已经检查了那个参数。以下是一些摘录。
startDate.set(2010, 8, 28);
SchedulerCalendar currentDate = (SchedulerCalendar) startDate.clone();
for(int i = 0; i<daysDisplayed; i++){
newDate = new TextView(this);
String dateString = currentDate.get(Calendar.MONTH)+"/"+currentDate.get(Calendar.DATE);
//+"/"+currentDate.get(Calendar.YEAR);
newDate.setText(dateString);
newDate.setId(i+1);
newDate.setWidth(blockWidth);
newDate.setHeight(DATE_HEIGHT);
dateBar.addView(newDate);
currentDate.add(Calendar.DATE, 1);
}
private class SchedulerCalendar extends GregorianCalendar {
@Override
public void add(int field, int value) {
super.add(field, value);
if(this.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY) {
if(value>=0) super.add(Calendar.DATE, 2);
if(value<0) super.add(Calendar.DATE, -1);
}
if(this.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY) {
if(value>=0) super.add(Calendar.DATE, 1);
if(value<0) super.add(Calendar.DATE, -2);
}
}
}
答案 0 :(得分:9)
我强烈怀疑你没有考虑到月份是0的事实。所以这个:
startDate.set(2010, 8, 28);
将其设置为九月 2010年第28期。您还没有说出您的期望,但我怀疑您想要八月(java.util.Calendar中的第7个月)。< / p>
我怀疑这是问题,因为十月第二和第三是周六和周日。
我是否强烈建议您使用Joda Time作为日期和时间API而不是java.util。{Date,Calendar}?内置类有很多类似的问题。
答案 1 :(得分:3)
如果您想继续使用java.util.Calendar
,您可能还应该使用Calendar.JANUARY
,Calendar.FEBRUARY
等常量。
答案 2 :(得分:0)