求一个方法

liuyyuns 2010-05-05 01:39:29
求一个方法,需求是:传入两个参数,第一个参数是开始日期,第二个参数是结束日期,计算两个日期之间的整年、整月、和整日。例如:从2008年2月1号到2010年5月5号,整年有2008年2月1号到2009年1月31号和2009年2月1号到2010年1月31号,整月有2010年的2月1号到2月28号和3月1号到3月31号和4月1号到4月30号,整日有5月1号、2号、3号、4号、5号。
急需答案,谢谢了。
有了答案马上结贴。。。
...全文
250 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlyingFish0912 2010-05-05
  • 打赏
  • 举报
回复
七楼牛人!
sky123123 2010-05-05
  • 打赏
  • 举报
回复
qi 楼好强啊 O(∩_∩)O~
fm2005 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justlearn 的回复:]

返回一个3位的List数组,具体显示方式可以自己改
Java code

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

class Test {

publi……
[/Quote]
正解!
yuanlaifenglin 2010-05-05
  • 打赏
  • 举报
回复
7楼满分。。。学习
justlearn 2010-05-05
  • 打赏
  • 举报
回复
返回一个3位的List数组,具体显示方式可以自己改

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

class Test {

public static void main(String[] args) {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
start.set(2008, 1, 1);//2008年2月1日
end.set(2010, 4, 5);//2010年4月5日
List<String>[] rtnLists = getDateFigure(start.getTime(),
end.getTime());

for (int i = 0; i < rtnLists.length; i++) {
List<String> lt = rtnLists[i];
switch (i) {
case 0:
System.out.println("整年");
break;
case 1:
System.out.println("整月");
break;
default:
System.out.println("整日");
break;
}
for (String string : lt) {
System.out.println(string);
}
}
}

public static List<String>[] getDateFigure(Date dStart, Date dEnd) {
List<String>[] rtnLists = new List[3];
List<String> ltYear = new ArrayList<String>();
List<String> ltMonth = new ArrayList<String>();
List<String> ltDay = new ArrayList<String>();
rtnLists[0] = ltYear;
rtnLists[1] = ltMonth;
rtnLists[2] = ltDay;

if (dStart.after(dEnd)) {
return rtnLists;
}

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Calendar start = Calendar.getInstance();
start.setTime(dStart);
Calendar end = Calendar.getInstance();
end.setTime(dEnd);
end.add(Calendar.DAY_OF_MONTH, 1);
String s = sdf.format(start.getTime());
start.add(Calendar.YEAR, 1);

while (end.compareTo(start) > -1) {
start.add(Calendar.DAY_OF_MONTH, -1);
ltYear.add(s + "-" + sdf.format(start.getTime()));
start.add(Calendar.DAY_OF_MONTH, 1);
s = sdf.format(start.getTime());
start.add(Calendar.YEAR, 1);
}
start.add(Calendar.YEAR, -1);
start.add(Calendar.MONTH, 1);
while (end.compareTo(start) > -1) {
start.add(Calendar.DAY_OF_MONTH, -1);
ltMonth.add(s + "-" + sdf.format(start.getTime()));
start.add(Calendar.DAY_OF_MONTH, 1);
s = sdf.format(start.getTime());
start.add(Calendar.MONTH, 1);
}
start.add(Calendar.MONTH, -1);
while (end.after(start)) {
start.add(Calendar.DAY_OF_MONTH, 1);
ltDay.add(s);
s = sdf.format(start.getTime());
}
return rtnLists;
}
}

输出结果
整年
2008年02月01日-2009年01月31日
2009年02月01日-2010年01月31日
整月
2010年02月01日-2010年02月28日
2010年03月01日-2010年03月31日
2010年04月01日-2010年04月30日
整日
2010年05月01日
2010年05月02日
2010年05月03日
2010年05月04日
2010年05月05日
psfan1986 2010-05-05
  • 打赏
  • 举报
回复
建议用java.util.Calender
jacky花园 2010-05-05
  • 打赏
  • 举报
回复
弱~~`
我说我....
lhbwrh 2010-05-05
  • 打赏
  • 举报
回复
真的不明白。。
liuyyuns 2010-05-05
  • 打赏
  • 举报
回复
求一个方法,需求是:传入两个参数,第一个参数是开始日期,第二个参数是结束日期,计算两个日期之间的自然年,自然月,自然天,比如:从2008年1月1日到2010年2月2日,之间的自然年份是2008年和2009年,自然月是2010年1月,自然日是2010年2月1日和2月2日。
茫茫大海 2010-05-05
  • 打赏
  • 举报
回复
你的问题问的很模糊啊,能具体说清楚吗?
  • 打赏
  • 举报
回复
看都看不懂

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧