java如何计算给出的两个日期相隔多少天?

来得查理 2011-03-18 09:49:26
java如何计算两个日期相隔多少天?

如:给定年份计算:2005-5-10到2011-1-1 ?

给定月分计算 :1-1 到12 -1

给定日子计算: 1 到 31

如何实现?
...全文
1681 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddsmine 2011-10-27
  • 打赏
  • 举报
回复
package programming;

import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JOptionPane;

public class CalendarTest
{
public static void main(String[] args)
{
String str1=JOptionPane.showInputDialog(null,
"请输入第一个日期(日期格式为YYYYMMDD,如1999年1月12日应输入为19990112):");
String str2=JOptionPane.showInputDialog(null,
"请输入第二个日期(日期格式为YYYYMMDD,如1999年1月12日应输入为19990112):");

Calendar calendar1=new GregorianCalendar();
Calendar calendar2=new GregorianCalendar();
calendar1.set(Integer.parseInt(str1.substring(0, 4)),
Integer.parseInt(str1.substring(4, 6)),Integer.parseInt(str1.substring(6, 8)));
calendar2.set(Integer.parseInt(str2.substring(0, 4)),
Integer.parseInt(str2.substring(4, 6)),Integer.parseInt(str2.substring(6, 8)));

long mills1=calendar1.getTimeInMillis();
long mills2=calendar2.getTimeInMillis();
long interval=0;
if(mills1<mills2){
System.out.println("第一个日期先于第二个日期");
interval=(mills2-mills1)/(24*3600*1000);
}
else if(mills1>mills2){
System.out.println("第二个日期先于第一个日期");
interval=(mills1-mills2)/(24*3600*1000);
}
else
System.out.println("两个日期相等");

System.out.println("两个日期的间隔是:"+interval+" 天");

}
}
猴哥说Java 2011-05-02
  • 打赏
  • 举报
回复

public class CaluateDate {

/**
*
 5、编写一个Java应用程序,当用户在输入对话框中输入两个日期后
(日期格式为YYYYMMDD,如1999年1月12日应输入为19990112),程序将判断两个日期的先后顺序,
以及两个日期之间的间隔天数(例如1999年1月1日和1999年1月2日之间的间隔是1天)。(本题20分)


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

Calendar c1=getCalendar("19521231");
Calendar c2=getCalendar("19491001");
System.out.println(getDay(c1, c2));
}

public static Calendar getCalendar(String date){
int year=Integer.parseInt(date.substring(0,4));
int month=Integer.parseInt(date.substring(4, 6));
int day=Integer.parseInt(date.substring(6, 8));

GregorianCalendar c=new GregorianCalendar(year, month, day);
return c;

}

public static int getDay(Calendar c1,Calendar c2){
long m;
int day;
if(c1.compareTo(c2)>0){
m=c1.getTimeInMillis()-c2.getTimeInMillis();
}else if(c1.compareTo(c2)<0){
m=c2.getTimeInMillis()-c1.getTimeInMillis();
}else{
m=0;
}
day=(int)(m/(1000*60*60*24));
return day;

}


}
huntor 2011-03-19
  • 打赏
  • 举报
回复
import java.util.concurrent.TimeUnit;

public long daysBetween(Calendar from,Calendar to){
return TimeUnit.MILLISECONDS.toDays(to.getTimeInMillis() - from.getTimeInMillis());
}
huntor 2011-03-18
  • 打赏
  • 举报
回复
使用 Joda-time 库。
JamesLiu 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kebin0001 的回复:]
Java code

public static int betweenDays(Calendar beginDate, Calendar endDate) {
//可以用正負代表前後
//return (int)((beginDate.getTimeInMillis() - endDate.getTimeInMillis())/(1000*60*60*24));

……
[/Quote]
这个是正确的
richard14174 2011-03-18
  • 打赏
  • 举报
回复
恩 换成毫秒后再进行计算
OCodeBNothing 2011-03-18
  • 打赏
  • 举报
回复
直接getTimeInMillis()接可以得到毫秒在算
knightzhuwei 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 computer001 的回复:]

引用 5 楼 licip 的回复:
把日期转化成毫秒,相减得到毫秒数,然后再转化为天


有点抽象的感觉

你可以写个例子吗?
[/Quote]
3楼就是例子
来得查理 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 licip 的回复:]
把日期转化成毫秒,相减得到毫秒数,然后再转化为天
[/Quote]

有点抽象的感觉

你可以写个例子吗?
licip 2011-03-18
  • 打赏
  • 举报
回复
把日期转化成毫秒,相减得到毫秒数,然后再转化为天
zqfddqr 2011-03-18
  • 打赏
  • 举报
回复
date4j
kebin0001 2011-03-18
  • 打赏
  • 举报
回复

public static int betweenDays(Calendar beginDate, Calendar endDate) {
//可以用正負代表前後
//return (int)((beginDate.getTimeInMillis() - endDate.getTimeInMillis())/(1000*60*60*24));

//不然就取絕對值。
return (int) Math.abs((beginDate.getTimeInMillis() - endDate.getTimeInMillis())/(1000*60*60*24));
}

Coolfatman 2011-03-18
  • 打赏
  • 举报
回复
有年月日的好办。

只有月日的,不知怎么考虑2/29 ,或者 是否支持 12-1 到 1-1
knightzhuwei 2011-03-18
  • 打赏
  • 举报
回复

public int betweenDays(Calendar beginDate, Calendar endDate) {
if (beginDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
return endDate.get(Calendar.DAY_OF_YEAR)
- beginDate.get(Calendar.DAY_OF_YEAR);
} else {
if (beginDate.getTimeInMillis() < endDate.getTimeInMillis()) {
int days = beginDate.getActualMaximum(Calendar.DAY_OF_YEAR)
- beginDate.get(Calendar.DAY_OF_YEAR)
+ endDate.get(Calendar.DAY_OF_YEAR);
for (int i = beginDate.get(Calendar.YEAR) + 1; i < endDate
.get(Calendar.YEAR); i++) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, i);
days += c.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return days;
} else {
int days = endDate.getActualMaximum(Calendar.DAY_OF_YEAR)
- endDate.get(Calendar.DAY_OF_YEAR)
+ beginDate.get(Calendar.DAY_OF_YEAR);
for (int i = endDate.get(Calendar.YEAR) + 1; i < beginDate
.get(Calendar.YEAR); i++) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, i);
days += c.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return days;
}
}
}
kkkmoving 2011-03-18
  • 打赏
  • 举报
回复
就是三楼的那个比较简单 上次我要用也是用的这种方法
中南逛哥 2011-03-18
  • 打赏
  • 举报
回复
这个以前也考滤过 在图书馆的借还时间 就用毫秒算
l5854537x 2011-03-18
  • 打赏
  • 举报
回复
Calendar c = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c.set(2011, 1, 10);
c2.set(2011, 1, 12);
System.out.println((c2.getTimeInMillis()-c.getTimeInMillis())/(1000*3600*24));
测试过,success!!
学会生活 2011-03-18
  • 打赏
  • 举报
回复
直接上代码

public long differDays(String date)
{
long differDays = 0;
long DAY = 24L * 60L * 60L * 1000L;
SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd" );

Date todayDate = new java.sql.Date(new Date().getTime());
Date paraDate = null;
try {
paraDate = df.parse( date );
} catch (ParseException e)
{
e.printStackTrace();
}
differDays = ( todayDate.getTime() - paraDate.getTime() ) / DAY ;
return differDays;
}
来得查理 2011-03-18
  • 打赏
  • 举报
回复

ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream("date6.txt"));
obj.writeObject(date);
obj.close();


写入后中文变成了乱码@!
铁匠梁老师 2011-03-18
  • 打赏
  • 举报
回复
到目前为止,可以使用手指
加载更多回复(4)

62,614

社区成员

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

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