java 两个日期之间分组问题

[复制链接]
查看11 | 回复2 | 2011-2-17 01:10:11 | 显示全部楼层 |阅读模式
有一个起始日期和一个截止日期比如:2010-06-28-- 2013-09-03
分组成这样
2010-06-28 -- 2011-06-27
2011-06-28 -- 2012-06-27
2012-06-28 -- 2013-06-27
像这样分割成几对然后取系统当前日期看是属于哪一组里面的把那一组日期取出来。
麻烦哪位大侠帮忙写下最好是java的
回复

使用道具 举报

千问 | 2011-2-17 01:10:11 | 显示全部楼层
<pre id=\\\"best-answer-content\\\">import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateUtil {

/**
* @param args
*/
public static void main(String[] args) {

try {
ListString[] dateList = groupDate(\\\"2010-06-28\\\",\\\"2013-09-03\\\");
for(String[] dateArr : dateList){

System.out.println(dateArr[0] \\\" -- \\\" dateArr[1]);
}
System.out.println(\\\"----------------------------\\\");

Calendar today = Calendar.getInstance();
today.setTimeInMillis(System.currentTimeMillis());

String[] dateGroup = getDateGroup(dateList, today);
System.out.println(dateGroup[0] \\\" -- \\\" dateGroup[1]);

} catch (ParseException e) {
System.out.println(\\\"日期格式不对!正确格式:yyyy-MM-dd\\\");
e.printStackTrace();
}
}

private static String[] getDateGroup(ListString[] dateList, Calendar today) throws ParseException {
DateFormat df = new SimpleDateFormat(\\\"yyyy-MM-dd\\\");
for(String[] dateArr : dateList){
Date start_d = df.parse(dateArr[0]);
Date end_d = df.parse(dateArr[1]);

Calendar start_c = Calendar.getInstance();
Calendar end_c = Calendar.getInstance();

start_c.setTime(start_d);
end_c.setTime(end_d);

if(today.after(start_c)
}
}
return null;
}

public static ListString[] groupDate(String start, String end) throws ParseException
{
DateFormat df = new SimpleDateFormat(\\\"yyyy-MM-dd\\\");
Date start_d = df.parse(start);
Date end_d = df.parse(end);

Calendar start_c = Calendar.getInstance();
Calendar end_c = Calendar.getInstance();

start_c.setTime(start_d);
end_c.setTime(end_d);

if(start_c.after(end_c)){
start_c.setTime(end_d);
end_c.setTime(start_d);
}

ListString[] result = new ArrayListString[]();
Calendar temp = null;
while(start_c.before(end_c)){
String[] groupArr = new String[2];

temp = (Calendar) start_c.clone();
start_c.roll(Calendar.YEAR, true);
start_c.roll(Calendar.DAY_OF_YEAR, false);

if(start_c.after(end_c)){

groupArr[0] = calendar2String(temp);

groupArr[1] = calendar2String(end_c);
}
else{

groupArr[0] = calendar2String(temp);

groupArr[1] = calendar2String(start_c);
}

result.add(groupArr);

start_c.roll(Calendar.DAY_OF_YEAR, true);
}

return result;
}

public static String calendar2String(Calendar c){
return c.get(Calendar.YEAR) \\\"-\\\" (c.get(Calendar.MONTH) 1) \\\"-\\\" c.get(Calendar.DATE);
}
}
回复

使用道具 举报

千问 | 2011-2-17 01:10:11 | 显示全部楼层
<p>

<pre class=\\\"answer-content\\\">import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

public class DateCheck {
static SimpleDateFormat sdf = new SimpleDateFormat(\\\"yyyy-MM-dd\\\");

public static void main(String[] ags) {
ArrayListCalendar start = new ArrayListCalendar();
ArrayListCalendar end = new ArrayListCalendar();
Calendar dateToCheck;

start.add(getStartDate());
end.add(getEndDate());
dateToCheck = getDateToCheck();

groupingDates(start, end);
int check = checkDateInGroups(dateToCheck, start, end);

if (check == -1) {
System.out.println(\\\"\\\\nGiven date is not found in all periods.\\\");
}
else {
System.out.println(\\\"\\\\nGiven date is in period \\\" check);
}
}

private static Calendar getStartDate() {
Calendar result = Calendar.getInstance();
result.set(2010, Calendar.JUNE, 28);
System.out.print(\\\"From \\\" sdf.format(result.getTime()));
return result;
}

private static Calendar getEndDate() {
Calendar result = Calendar.getInstance();
result.set(2013, Calendar.SEPTEMBER, 3);
System.out.println(\\\" to \\\" sdf.format(result.getTime()));
return result;
}

private static Calendar getDateToCheck() {
Calendar result = Calendar.getInstance();
System.out.println(\\\"Date to check is: \\\"

sdf.format(result.getTime()) \\\"\\\\n\\\");
return result;
}

private static void groupingDates(
ArrayListCalendar start, ArrayListCalendar end) {
boolean finished = false;
int position = 0;

while (!finished) {
Calendar startDate = start.get(start.size() - 1);
Calendar endDate = end.get(start.size() - 1);

int year = startDate.get(Calendar.YEAR) 1;
int month = startDate.get(Calendar.MONTH);
int date = startDate.get(Calendar.DATE) - 1;

Calendar nextEndDate = Calendar.getInstance();
nextEndDate.set(year, month, date);

if (nextEndDate.compareTo(endDate)0) {

Calendar nextStartDate = Calendar.getInstance();

nextStartDate.set(year, month, date 1);

start.add(nextStartDate);

end.add(position, nextEndDate);
}
else {

finished = true;
}
}

for (int i = 0; istart.size(); i) {
System.out.println(\\\"Period \\\" i \\\" : From \\\"

sdf.format(start.get(i).getTime()) \\\" to \\\"

sdf.format(end.get(i).getTime()));
}
}

private static int checkDateInGroups(Calendar date,
ArrayListCalendar start, ArrayListCalendar end) {
for (int i = 0; istart.size(); i) {
if (date.compareTo(start.get(i)) = 0

= 0) {

return i;
}
}
return -1;
}
}

</p>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行