2012-01-19 16 views
7

我试图找出使用的DateFormatSymbols平日里,这里是一个短PROGRAME的DateFormatSymbols()。getShortWeekdays()返回平日算作8

String[] shortWeekdays = new DateFormatSymbols().getShortWeekdays(); 
     System.out.println(shortWeekdays.length); 

     for (int i = 0; i < shortWeekdays.length; i++) { 
      String shortWeekday = shortWeekdays[i]; 
      System.out.println("shortWeekday = " + shortWeekday); 
     } 

,它是给我folloiwng输出

  • shortWeekday =
  • shortWeekday =太阳
  • shortWeekday =周一
  • shortWeekday =周二
  • shortWeekday =周三
  • shortWeekday =周四
  • shortWeekday =周五
  • shortWeekday =周六

我不知道为什么它给人总长度为8,而它应该给它7

回答

10

Calendar.{SUNDAY, MONDAY, ... SUNDAY }的值范围是1-7。为getShortWeekDays()状态的文档:

返回:短期工作日字符串。使用Calendar.SUNDAY,Calendar.MONDAY等来索引结果数组。

所以,我期望一个数组可以索引值为1-7 ...这意味着它必须有8个元素(因为Java中的所有数组都是基于0的)。

+0

这意味着我必须做一些像'arraycopy(shortWeekday,1,newShortWeekday,0,7);'? –

+0

@ user702325:如果你想要一个索引为0-6的数组,那么是的。不管你是否“做”,都很难说,因为我们不知道你在努力达到什么目的。 –

+0

我必须在UI(jsp)上显示星期几复选框的列表,所以我使用上面显示一个额外复选框的方法返回了一个字符串数组。 –

1

Java中的星期几是基于1的,而不是基于0的。在的DateFormatSymbols类的作者明确决定,他会做以下

private void initializeData(Locale desiredLocale) { 
    int i; 
    ResourceBundle resource = cacheLookup(desiredLocale); 

    // FIXME: cache only ResourceBundle. Hence every time, will do 
    // getObject(). This won't be necessary if the Resource itself 
    // is cached. 
    eras = (String[])resource.getObject("Eras"); 
    months = resource.getStringArray("MonthNames"); 
    shortMonths = resource.getStringArray("MonthAbbreviations"); 
    String[] lWeekdays = resource.getStringArray("DayNames"); 
    weekdays = new String[8]; 
    weekdays[0] = ""; // 1-based 
    for (i=0; i<lWeekdays.length; i++) 
     weekdays[i+1] = lWeekdays[i]; 
    String[] sWeekdays = resource.getStringArray("DayAbbreviations"); 
    shortWeekdays = new String[8]; 
    shortWeekdays[0] = ""; // 1-based 
/*** start of what causes your odd behaviour **/ 
    for (i=0; i<sWeekdays.length; i++) 
     shortWeekdays[i+1] = sWeekdays[i]; 
    ampms = resource.getStringArray("AmPmMarkers"); 
    localPatternChars = resource.getString("DateTimePatternChars"); 

locale = desiredLocale; 
} 

为了使它有点简单进行一天的查找。