java 求两个日期之间的日期数

greatmind829 2010-11-30 11:00:09
例如有一开始时间:2010-11-2 结束时间 2010-11-25 返回的结果是:2010-11-3,2010-11-4.。。。2010-11-25 ,其中开始时间和结束时间是不确认的,有可以相差几年,有可能想差几个月,也有可能就相差几天。求一算法。。
本人的写法,如果是系统时间是三 月 2 号 相差29 天就显示不了 3 月31


public static String countYearDate(Date beginDate , int days)
{
Calendar cal1 = Calendar.getInstance();


cal1.setTime(beginDate);
int year= cal1.get(Calendar.YEAR);
int month=cal1.get(Calendar.MONTH)+1;
int day= cal1.get(Calendar.DAY_OF_MONTH);


if ((month == 1) || (month ==3) || (month == 5) ||( month == 7) ||(month == 8)|| (month == 10) || (month == 12)) // �?31 �?
{



int allDay = day+days;

int d = allDay %31;
if (d == 0)
{
cal1.set(Calendar.DAY_OF_MONTH, 31);
}
else {
cal1.set(Calendar.DAY_OF_MONTH, d);
}


int m=allDay / 31;

if (m >1)
{
month += m;
cal1.set(Calendar.MONTH, month);

}
else if (m == 1 && d == 0)
{
cal1.set(Calendar.MONTH, month);

}
else if (m ==1 && d <=31)
{
cal1.set(Calendar.MONTH, month+1);
}
else
{

cal1.set(Calendar.MONTH, month);
}
if (month >=11)
{
year +=1;
}
cal1.set(Calendar.YEAR,year);




}
else if (month == 2 ) // 2 月是平年还是闰年
{

boolean leapYear= CalendarConvert.isLeapYear(year); // 判断年份是平年还是闰年

if (leapYear)
{

int allDay= day+days;

day = allDay %29;
if (day == 0)
{
cal1.set(Calendar.DAY_OF_MONTH, 29);
}
else {
cal1.set(Calendar.DAY_OF_MONTH, day);
}


int m=allDay / 29;

if (m >1)
{
month += m;
cal1.set(Calendar.MONTH, month);

}
else if (m == 1 && day == 0)
{

cal1.set(Calendar.MONTH, month);
}
else if (m ==1 && day <=29)
{
cal1.set(Calendar.MONTH, month+1);
}
else
{

cal1.set(Calendar.MONTH, month);
}
if (month >=11)
{
year +=1;
}
cal1.set(Calendar.YEAR,year);

}
else
{
int allDay= day+days;

day = allDay %28;
if (day == 0)
{
cal1.set(Calendar.DAY_OF_MONTH, 28);
}
else {
cal1.set(Calendar.DAY_OF_MONTH, day);
}


int m=allDay / 28;

if (m >1)
{
month += m;
cal1.set(Calendar.MONTH, month);

}
else if (m == 1 && day == 0)
{

cal1.set(Calendar.MONTH, month);
}
else if (m ==1 && day <=28)
{
cal1.set(Calendar.MONTH, month+1);
}
else
{

cal1.set(Calendar.MONTH, month);
}
if (month >=11)
{
year +=1;
}
cal1.set(Calendar.YEAR,year);
}
}
else // 30 天
{

int allDay= day+days;

day = allDay %30;
cal1.set(Calendar.DAY_OF_MONTH, day);

int m=allDay / 30;

if (m > 1)
{
month += (m-1);

}

cal1.set(Calendar.MONTH, month);

if (month >=11)
{
year +=1;
}
cal1.set(Calendar.YEAR, year);
}

Calendar cal2 = Calendar.getInstance();
cal2.setTime(cal1.getTime());

Integer lastYear = cal2.get(Calendar.YEAR);
Integer lastMonth = cal2.get(Calendar.MONTH);
Integer lastDay = cal2.get(Calendar.DAY_OF_MONTH);

String timeDate=lastYear.toString() +"-" + lastMonth.toString() +"-"+lastDay;

System.out.println(lastYear +"年" + lastMonth+"月" + lastDay + "日");
// System.out.println(timeDate);
return timeDate;
}

public static void main(String[] args) {

countYearDate(new Date(), 29);
}


求解答。。
...全文
141 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
茫茫大海 2010-11-30
  • 打赏
  • 举报
回复

import java.util.Calendar;
import java.util.Date;

public class TestDate {
public static String countYearDate(Date beginDate, int days) {
Calendar cal1 = Calendar.getInstance();

cal1.setTime(beginDate);
int year = cal1.get(Calendar.YEAR);
int month = cal1.get(Calendar.MONTH) + 1;
int day = cal1.get(Calendar.DAY_OF_MONTH);

if ((month == 1) || (month == 3) || (month == 5) || (month == 7)
|| (month == 8) || (month == 10) || (month == 12)) //
{

int allDay = day + days;

int d = allDay % 31;
if (d == 0) {
cal1.set(Calendar.DAY_OF_MONTH, 31);
} else {
cal1.set(Calendar.DAY_OF_MONTH, d);
}

int m = allDay / 31;

if (m > 1) {
month += m;
cal1.set(Calendar.MONTH, month);

} else if (m == 1 && d == 0) {
cal1.set(Calendar.MONTH, month);

} else if (m == 1 && d <= 31) {
cal1.set(Calendar.MONTH, month + 1);
} else {

cal1.set(Calendar.MONTH, month);
}
if (month >= 11) {
year += 1;
}
cal1.set(Calendar.YEAR, year);

} else if (month == 2) // 2 月是平年还是闰年
{

boolean leapYear = CalendarConvert.isLeapYear(year); // 判断年份是平年还是闰年

if (leapYear) {

int allDay = day + days;

day = allDay % 29;
if (day == 0) {
cal1.set(Calendar.DAY_OF_MONTH, 29);
} else {
cal1.set(Calendar.DAY_OF_MONTH, day);
}

int m = allDay / 29;

if (m > 1) {
month += m;
cal1.set(Calendar.MONTH, month);

} else if (m == 1 && day == 0) {

cal1.set(Calendar.MONTH, month);
} else if (m == 1 && day <= 29) {
cal1.set(Calendar.MONTH, month + 1);
} else {

cal1.set(Calendar.MONTH, month);
}
if (month >= 11) {
year += 1;
}
cal1.set(Calendar.YEAR, year);

} else {
int allDay = day + days;

day = allDay % 28;
if (day == 0) {
cal1.set(Calendar.DAY_OF_MONTH, 28);
} else {
cal1.set(Calendar.DAY_OF_MONTH, day);
}

int m = allDay / 28;

if (m > 1) {
month += m;
cal1.set(Calendar.MONTH, month);

} else if (m == 1 && day == 0) {

cal1.set(Calendar.MONTH, month);
} else if (m == 1 && day <= 28) {
cal1.set(Calendar.MONTH, month + 1);
} else {

cal1.set(Calendar.MONTH, month);
}
if (month >= 11) {
year += 1;
}
cal1.set(Calendar.YEAR, year);
}
} else // 30 天
{

int allDay = day + days;

day = allDay % 30;
cal1.set(Calendar.DAY_OF_MONTH, day);

int m = allDay / 30;

if (m >= 1) {//m大于等于1,就说明月份超过了1月,month加m
month += m;
}

cal1.set(Calendar.MONTH, month-1);//在这里设置month-1

if (month > 12) {//当月份大于12时表示超过了一年,year+1
year += 1;
}
cal1.set(Calendar.YEAR, year);
}

Calendar cal2 = Calendar.getInstance();
cal2.setTime(cal1.getTime());

Integer lastYear = cal2.get(Calendar.YEAR);
Integer lastMonth = cal2.get(Calendar.MONTH) + 1;//取月份要加1
Integer lastDay = cal2.get(Calendar.DAY_OF_MONTH);

String timeDate = lastYear.toString() + "-" + lastMonth.toString()
+ "-" + lastDay;

System.out.println(lastYear + "年" + lastMonth + "月" + lastDay + "日");
// System.out.println(timeDate);
return timeDate;
}

public static void main(String[] args) {
countYearDate(new Date(), 29);
}

}


class CalendarConvert {
public static boolean isLeapYear(int year) {
boolean flag = false;
flag = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
return flag;
}
}


else里面做了注释,其他的两个楼主,自己改就好了!
安心逍遥 2010-11-30
  • 打赏
  • 举报
回复
楼主好强啊,帮顶啊!嘿嘿
greatmind829 2010-11-30
  • 打赏
  • 举报
回复
countYearDate(new Date(), 29);
29 代表两个日期之间相差的天数。
greatmind829 2010-11-30
  • 打赏
  • 举报
回复
用的是MYSQL 不支持..
hzzduoduo 2010-11-30
  • 打赏
  • 举报
回复
为什么不用sql语句查询呢?
chenyun2000 2010-11-30
  • 打赏
  • 举报
回复
public static void main(String[] args) {
outputDate("2010-11-2","2010-11-25");
}

public static void outputDate(String startDate, String endDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-d");
Calendar startCal = Calendar.getInstance();
Calendar endCal = Calendar.getInstance();

try {
startCal.setTime(sdf.parse(startDate));
endCal.setTime(sdf.parse(endDate));
while (startCal.before(endCal)) {
startCal.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(startCal.getTime()));
}
;
} catch (ParseException e) {
e.printStackTrace();
}

}
greatmind829 2010-11-30
  • 打赏
  • 举报
回复
为什么你那样设置一下就行了呢!有点不明白。。。
greatmind829 2010-11-30
  • 打赏
  • 举报
回复
深海寻瑜 谢谢了。
这个 不错。。
printf_2012 2010-11-30
  • 打赏
  • 举报
回复
都很给力。。上面应该能解决吧。。顺便来接下分。。
alpha_423 2010-11-30
  • 打赏
  • 举报
回复

public static void countYearDate(Date beginDate, int days)
{
Calendar cal1 = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
for (int i = 1; i <= days; i++)
{
cal1.setTime(beginDate);
cal1.add(Calendar.DAY_OF_MONTH, i);
System.out.println(sdf.format(cal1.getTime()));
}
}

public static void main(String[] args)
{

countYearDate(new Date(), 29);
}
zhangliang_88 2010-11-30
  • 打赏
  • 举报
回复
学习了~顶下~
茫茫大海 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 greatmind829 的回复:]
没人解答,自己顶。。
[/Quote]
按上面的还不能解决吗?
greatmind829 2010-11-30
  • 打赏
  • 举报
回复
没人解答,自己顶。。

81,091

社区成员

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

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