2012-09-29 23 views
0

我有一个显示用户活动的JSF表。如何始终显示本周的最后一天

<p:lineChart id="logins" value="#{StatisticsController.weekActivity}" legendPosition="e" 
           title="Weekly Logins" seriesColors="4D94FF, 1975FF, 005CE6, 0047B2" minY="0" maxY="200"/> 


public class Statistics implements Serializable { 

    private CartesianChartModel weeksActivity; 

    public Statistics() { 
     createweeksActivity(); 

    } 

    public CartesianChartModel getweekActivity() { 
     return weeksActivity; 
    } 

    private void createweeksActivity() { 
     weeksActivity = new CartesianChartModel(); 

     ChartSeries boys = new ChartSeries(); 
     boys.setLabel("Active Accounts"); 

     boys.set("Monday", 120); 
     boys.set("Tuesday", 100); 
     boys.set("Wednesday", 44); 
     boys.set("Thursday", 150); 
     boys.set("Friday", 120); 
     boys.set("Saturday", 82); 
     boys.set("Sunday", 115); 

     ChartSeries girls = new ChartSeries(); 
     girls.setLabel("Blocked Accounts"); 

     girls.set("Monday", 52); 
     girls.set("Tuesday", 60); 
     girls.set("Wednesday", 110); 
     girls.set("Thursday", 135); 
     girls.set("Friday", 120); 
     girls.set("Saturday", 140); 
     girls.set("Saturday", 130); 
     girls.set("Sunday", 140); 

     weeksActivity.addSeries(boys); 
     weeksActivity.addSeries(girls); 
    } 


} 

我想显示当天总是最后的顺序。例如: 现在我得到这样的顺序:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday 举例来说,如果今天是周三,我想,当我打开网页得到这个顺序:

Thursday, Friday, Saturday, Sunday, Monday, Tuesday, Wednesday 

我怎么能解决这个问题?

EDIT: 

我更新的代码是这样的:

private void createweeksActivity() 
    { 

     weeksActivity = new CartesianChartModel(); 

     ChartSeries activeAccounts = new ChartSeries(); 
     activeAccounts.setLabel("Active Accounts"); 

     ChartSeries blockedAccounts = new ChartSeries(); 
     blockedAccounts.setLabel("Blocked Accounts"); 

     GregorianCalendar calendar = new GregorianCalendar(); 
     DateFormat df = new SimpleDateFormat("EEEE"); 
     for (int i = 0; i < 7; i++) 
     { 
      calendar.add(Calendar.DATE, 1); 
      System.out.println(df.format(calendar.getTime())); 
      activeAccounts.set(df.format(calendar.getTime()), getNumberOfLogins(df.format(calendar.getTime()))); 
      blockedAccounts.set(df.format(calendar.getTime()), getNumberOfLogins(df.format(calendar.getTime()))); 
     }  

     weeksActivity.addSeries(activeAccounts); 
     weeksActivity.addSeries(blockedAccounts); 
    } 

    public int getNumberOfLogins(String day){ 

     // Get here the number of logins using SQL command 
     // Example: SELECT * FROM HISTORY WHERE DAY = day; 

     return 100; 
    } 

我想它会成功。

回答

5
GregorianCalendar calendar = new GregorianCalendar(); 
DateFormat df = new SimpleDateFormat("EEEE"); 
for (int i = 0; i < 7; i++) { 
    calendar.add(Calendar.DATE, 1); 
    System.out.println(df.format(calendar.getTime())); 
} 

的GregorianCalendar代表某个时刻,我们的公历。它的无参数构造函数将其初始化为当前时间。

DateFormat用于格式化日期。您可以使用getTime()方法将(Gregorian)Calendar转换为日期。 “EEEE”是指一周中最长的一天。

(Gregorian)Calendar.add()方法允许向日历(年,月,日期,小时等)的任何字段添加值。既然你想遍历一周中的每一天,我从明天开始,每次迭代增加1天。

一切都在the javadoc

+0

+1非常干净实用:D – gtgaxiola

+0

请您稍微扩展一下代码。我是Java新手。我需要一点解释我如何使用这段代码。 –

+0

即时通讯+1 –

1

根据日历,将星期几作为地图显示为星期几的日期。

然后使用日历获取当前日期并使用模块化算法更改排序。

喜欢的东西:

//This you can do it one time and then use it in your program 
Map<Integer, String> daysOfWeek = new HashMap<Integer,String>(); 
daysOfWeek.put(Calendar.MONDAY, "Monday"); 
daysOfWeek.put(Calendar.TUESDAY, "Tuesday"); 
//so on and so forth. 



//Now the code that will be running 
//You get your current Day (Which will be the last one you want to see) 
int weekday = calendar.get(Calendar.DAY_OF_WEEK); 

//Start with next value (modulus 7 since you don't want overflow) 
int currDay = (weekday+1) % 7; 


//Go over the seven Days 
for(int i = 0; i < 7; i++) { 
    String currDay = daysOfWeek.get(currDay); //Get your Day String 

    //Here do whatever you need to do to set up the DAY in JSF 

    currDay = (currDay+1) % 7; //Moving currDay to the next Day 
} 
相关问题