我正在尝试构建一个用于时间跟踪的CellTable小部件。第一列必须以下列形式表示当月的所有日期
Fri, 1
Sat, 2
Sun, 3
Mon, 4
Tue, 5
…
等。直到月底(28-31排)。
我的代码看起来像这样:
Column<Rec,String> dayColumn = new Column<Rec,String>(new TextCell())
{
@Override
public String getValue(Rec rec)
{
dayNr = DateTimeFormat.getFormat( "EE,d" ).format(new Date());
return dayNr;
}
};
table.addColumn(dayColumn, "Date");
所以我可以在本专栏中看到所有单元格中的今日日期。 我怎样才能在这个列中获得每个月的所有日期(1 ... 28/30/31)?
答案 0 :(得分:1)
如果您准备了具有日期变量的Rec项列表,那将是理想的。
Class Rec{
Date date;
//getter and setters.
}
List<Rec> recItems = new ArrayList<Rec>();
Date now = new Date();
int nowMonth = now.getMonth();
int nowYear = now.getYear();
List<Date> listOfDatesInThisMonth = new ArrayList<Date>();
Date beginningOfMonth = new Date(nowYear,nowMonth,1);
Date beginningOfNextMonth = new Date(nowYear,nowMonth+1,1);
Date start = beginningOfMonth;
while(start.before(beginningOfNextMonth)){
listOfDatesInThisMonth.add(start);
start = new Date(nowYear,nowMonth,start.getDate()+1);
}
for(Date date:listOfDatesInThisMonth){
Rec recItem = new Rec();
recItem.setDate(date);
recItems.add(recItem );
}
Column<Rec,String> dayColumn = new Column<Rec,String>(new TextCell())
{
@Override
public String getValue(Rec rec)
{
dayNr = DateTimeFormat.getFormat( "EE,d" ).format(rec.getDate());
return dayNr;
}
};
答案 1 :(得分:0)
这样的东西?
private static String getMonthsString() {
StringBuffer buffer = new StringBuffer();
Date date = new Date() ;
int i = date.getMonth();
if(i==2)//feb {
for (int j = 0; j < 28; j++) {
buffer.append(DateTimeFormat.getFormat( "EE,d" ).format( new Date(new Date().getTime() + ((1000 * 60 * 60 * 24*j)))));
}
return buffer.toString();
}
答案 2 :(得分:0)
在单元格表中,每行是一条记录。一个月至少有28天。因此,您必须构建至少28条记录,并在单元格表上执行setList或setData。下面给出了一个简短的代码片段 -
Date currentDate = new Date();
Map<Integer, String> daysMap = new HashMap<Integer, String>();
daysMap .put(0,"Sunday");
.
.
daysMap .put(6, "Saturday");
Map<Integer, Integer> monthMap = new HashMap<Integer, Integer>();
monthMap.put(0, 31);
.
.
monthMap.put(0, 31);
List<Rec> list = new ArrayList<Rec>();
for(int i=1;i <= monthMap.get(currentDate.getMonth());i++)
{
list.add(new Rec( daysMap.get(currentDate.getDay())+" , "+ i ));
}
Column<Rec,String> dayColumn = new Column<Rec,String>(new TextCell())
{
@Override
public String getValue(Rec rec)
{
return rec.getDayDateString(); // which returns Friday, 1 etc.
}
};
table.addColumn(dayColumn, "Date");
ListDataProvider<Rec> listDataProvider = new ListDataProvider<Rec>();
listDataProvider.addDataDisplay(table);
listDataProvider.setList( list );
答案 3 :(得分:0)
您可以使用java.util.Calendar
在服务器端获取每个月的日期答案 4 :(得分:0)
显示日期的可滚动列表是可怕的可用性。我建议改用DatePickerCell。它使用日期选择器,因此用户只需单击日期即可选择它。