项目中遇到一个问题,程序在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有特殊要求啊,搜了很久也没有答案,希望朋友们给看看问题所在,谢谢!
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有特殊要求啊,搜了很久也没有答案,希望朋友们给看看问题所在,谢谢!
而且报的错是 非法参数DAY_OF_MONTH?
roundDown是做什么的?
你可以试着在jdk1.5的环境中建个类用main 把相关函数调一下
调试一下。看是不是websphere的问题。