大概的题目内容如下:
从画面接受两个字符串,格式如下:1981-02-26 ,1981-08-16
他要求通过程序分别根据月,周,日处理,得到三个arraylist。
第一个arraylist按月分就是形成{1981-02-26,1981-02-28,1981-03-01,1981-03-31......,1981-08-01,1981-08-16}这样的格式;
第二个arraylist按周分,先判断198-02-26是星期几,判断出是周四,然后算出那个星期周日。形成{1981-02-26,1981-02-29,1981-03-01,1981-03-02,1981-03-08,......,1981-08-10,1981-08-16}这样的格式;
第三个arraylist按日分,就是形成{1981-02-26,"",1981-02-27,""......1981-08-15,"",1981-08-16}这样的格式; 给我两个小时要我作完,光看英文就浪费一段时间了。还要编码。靠简直就是变态
从画面接受两个字符串,格式如下:1981-02-26 ,1981-08-16
他要求通过程序分别根据月,周,日处理,得到三个arraylist。
第一个arraylist按月分就是形成{1981-02-26,1981-02-28,1981-03-01,1981-03-31......,1981-08-01,1981-08-16}这样的格式;
第二个arraylist按周分,先判断198-02-26是星期几,判断出是周四,然后算出那个星期周日。形成{1981-02-26,1981-02-29,1981-03-01,1981-03-02,1981-03-08,......,1981-08-10,1981-08-16}这样的格式;
第三个arraylist按日分,就是形成{1981-02-26,"",1981-02-27,""......1981-08-15,"",1981-08-16}这样的格式; 给我两个小时要我作完,光看英文就浪费一段时间了。还要编码。靠简直就是变态
Calendar类里面的API肯定是够用的
第二组不明白 3月2日与8月10日 是怎样得来的,照我理解应该是说取周四才对啊,怎么是周一
不管这个的情况下面,代码不复杂 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar start = Calendar.getInstance();
start.setTime(sdf.parse("1981-02-26")); Calendar end = Calendar.getInstance();
end.setTime(sdf.parse("1981-08-16"));
Calendar now = Calendar.getInstance();
//第一组
now.setTime(start.getTime());
ArrayList first = new ArrayList();
first.add(sdf.format(start.getTime()));
now.set(Calendar.DATE, now.getActualMaximum(Calendar.DATE));
if(now.after(start) && now.before(end))
first.add(sdf.format(now.getTime()));
while(now.before(end)) {
now.set(Calendar.DATE, 1);
now.add(Calendar.MONTH, 1);
first.add(sdf.format(now.getTime()));
now.set(Calendar.DATE, now.getActualMaximum(Calendar.DATE));
if(!now.after(end))
first.add(sdf.format(now.getTime()));
}
if(!now.equals(end))
first.add(sdf.format(end.getTime()));
//第二组
now.setTime(start.getTime());
ArrayList second = new ArrayList();
int day = start.get(Calendar.DAY_OF_WEEK);
second.add(sdf.format(start.getTime()));
now.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
if(now.after(start) && now.before(end))
second.add(sdf.format(now.getTime()));
while(now.before(end)) {
now.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
now.add(Calendar.WEEK_OF_YEAR, 1);
second.add(sdf.format(now.getTime()));
if(day != Calendar.SATURDAY) {
now.set(Calendar.DAY_OF_WEEK, day);
if(!now.after(end))
second.add(sdf.format(now.getTime()));
}
now.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
if(!now.after(end))
second.add(sdf.format(now.getTime()));
}
if(!now.equals(end))
second.add(sdf.format(end.getTime()));
//第三组
now.setTime(start.getTime());
ArrayList third = new ArrayList();
while(!now.after(end)) {
third.add(sdf.format(now.getTime()));
now.add(Calendar.DATE, 1);
}
//
System.out.println(first);
System.out.println(second);
System.out.println(third);
1.按照月处理
他就是开始的日期,计算出月底的日期,然后下一个月的第一天,再月末,一直到结束日期.
month + 1 ,day 01就是下个月第一天。
上面的日期减去一天,就是这个月的月末。2.按照周计算
A.假如有1981-02-29这个值
他就是不断的计算周末,第一次计算的时候,用了开始日期 + 7 -开始日期的星期几,算出一个文字列,就是年,月不变,算出来的数字,加在日上面.然后换成正确的日期形式,因为1981年没有2月29号.然后开始用Calendar,day加1,加6,计算出每个星期的第一天,和最后一天.到结束日期. B.没有1981-02-29这个值.
和1的处理逻辑一样的.
3.按照日计算
这个就没有什么好说的了.
基本上,这个题目只是简单的应用.没有什么难度可言了.
import java.text.*;public class DateTest {
public static void main(String[] args) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar begin = Calendar.getInstance();
begin.setTime(sdf.parse("1981-02-28"));
Calendar end = Calendar.getInstance();
end.setTime(sdf.parse("1981-08-16"));
///第一个arraylist按月分
ArrayList dateList = new ArrayList();
int date1 = begin.get(Calendar.DATE);
if (date1 != begin.getActualMaximum(Calendar.DATE)) {
dateList.add(sdf.format(begin.getTime()));
begin.set(Calendar.DATE, begin.getActualMaximum(Calendar.DATE));
}
while(end.after(begin)) {
dateList.add(sdf.format(begin.getTime()));
begin.add(Calendar.MONTH, 1);
begin.set(Calendar.DATE, begin.getActualMinimum(Calendar.DATE));
if (!end.after(begin)) break;
dateList.add(sdf.format(begin.getTime()));
begin.set(Calendar.DATE, begin.getActualMaximum(Calendar.DATE));
}
dateList.add(sdf.format(end.getTime()));
for(int i = 0; i< dateList.size(); i++) {
System.out.println(dateList.get(i));
}
///第二个arraylist按周分
ArrayList second = new ArrayList();
begin.setTime(sdf.parse("1981-02-26"));
int day = begin.get(Calendar.DAY_OF_WEEK);
if (day != Calendar.SUNDAY) {
second.add(sdf.format(begin.getTime()));
begin.set(Calendar.DAY_OF_WEEK, begin.getActualMaximum(Calendar.DAY_OF_WEEK));
begin.add(Calendar.DATE, 1);
}
while (end.after(begin)) {
second.add(sdf.format(begin.getTime()));
begin.add(Calendar.DATE, 1);
if (!end.after(begin)) break;
second.add(sdf.format(begin.getTime()));
begin.add(Calendar.DATE, 6);
}
second.add(sdf.format(end.getTime()));
System.out.println();
for(int i = 0; i< second.size(); i++) {
System.out.println(second.get(i));
}
begin.setTime(sdf.parse("1981-02-26"));
ArrayList third = new ArrayList();
///第三个arraylist按日分
third.add(sdf.format(begin.getTime()));
begin.add(Calendar.DATE, 1);
while (end.after(begin)) {
third.add(sdf.format(begin.getTime()));
begin.add(Calendar.DATE, 1);
}
third.add(sdf.format(end.getTime()));
System.out.println();
for(int i = 0; i< third.size(); i++) {
System.out.println(third.get(i));
}
}
}
我用PB最多1小时完成。
虽然我Java不是很熟练,但自觉如果理解了题目的意思,算法确实很简单。
楼主加油了,这个题目没什么的。