项目中遇到一个问题,程序在websphere6.0下运行一切正常,但是换到websphere6.1后就报错了,后来跟了一下发现是jdk的问题,在jdk1.4下正常,在1.5下报错,报错如下:java.lang.IllegalArgumentException: DAY_OF_MONTH
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2475)
at java.util.Calendar.updateTime(Calendar.java:2276)
at java.util.Calendar.complete(Calendar.java:1319)
at java.util.GregorianCalendar.add(GregorianCalendar.java:843)
at com.founder.grmp.task.job.RecurranceRuleRfc.getFullDateValueList(RecurranceRuleRfc.java:143)
at com.founder.grmp.task.job.RecurranceRuleRfc.<init>(RecurranceRuleRfc.java:621)getFullDateValueList方法代码如下:private final List getFullDateValueList(int unit, int interval, Calendar inputCur, Calendar inputEnd)
    {
        Calendar cur = roundDown(unit, (Calendar) inputCur.clone());
        Calendar end = roundDown(unit, (Calendar) inputEnd.clone());        ArrayList resultList = new ArrayList();
        resultList.add(cur.clone());
        cur.add(unit, interval);      //就是这报错
        for (; cur.getTime().before(end.getTime()) || cur.getTime().equals(end.getTime()); cur.add(unit, interval))
        {
            resultList.add(cur.clone());
        }        return resultList;
    }
RecurranceRuleRfc方法中调用getFullDateValueList的代码如下: if ("WEEKLY".equals(freq))
            {
                  protoDateList.addAll(getFullDateValueList(Calendar.WEEK_OF_YEAR, interval, cur, limit));
                if (!foundByDay)
                    weekDaySet.add(new ByDay(0, Constants.convertDayNumberToDayName(cur.get(7))));
            }比较奇怪的是1.4没问题,1.5有问题,更加奇怪的是如果我把上面
protoDateList.addAll(getFullDateValueList(Calendar.WEEK_OF_YEAR, interval, cur, limit));
改为
protoDateList.addAll(getFullDateValueList(Calendar.DAY_OF_MONTH, interval, cur, limit));
程序也可以跑下去,也就是说“天”可以跑通,而“周”跑不通,这到底是为什么,我看了jdk1.5的api也没有说WEEK_OF_YEAR有特殊要求啊,搜了很久也没有答案,希望朋友们给看看问题所在,谢谢!

解决方案 »

  1.   

    楼主时说传入的参数是Calendar.WEEK_OF_YEAR时就报错?
    而且报的错是 非法参数DAY_OF_MONTH?
      

  2.   

    对,只要是Calendar.WEEK_OF_YEAR时就报错,是运行时错误,不是我写的有问题。
      

  3.   

    看不太懂了 怎么会报DAY_OF_MONTH的错呢?
    roundDown是做什么的?
    你可以试着在jdk1.5的环境中建个类用main 把相关函数调一下
    调试一下。看是不是websphere的问题。