java中如何得到两个日期相差几天??

jacky_tian 2007-06-17 12:21:36
在Java中,如何取得两个日期之间相差几天??? 比如我的时间a字段内容为:2005-09-03 23:15
时间b字段内容为:2005-09-04 01:09 如何计算他们之间相差的天数是1呢,用什么函数?注意,不是指的相差24小时的完整的天数,而是日期之差。再比如a 2005-09-28 23:15 到 b 2005-10-06 00:13 相差 8天
...全文
2315 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hardtoregistration 2008-07-09
  • 打赏
  • 举报
回复
Calendar
javabeginner2006 2007-06-18
  • 打赏
  • 举报
回复
先得到long t = end.getTime() - start.getTime();
然后把t转换成多少天多少小时多少分钟多少秒不就行了。在转换的时候注意如果不满一天就不显示天,以此类推不就行了。
jojoy_828 2007-06-18
  • 打赏
  • 举报
回复
import java.text.SimpleDateFormat;
import java.util.Date;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

public class Test {
public static void main(String[] args) throws Exception{
SimpleDateFormat smdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String result="";
try {
Date start = smdf.parse("2005-09-28 23:59:59");
Date end = smdf.parse("2005-09-29 00:00:00");
long t = (end.getTime() - start.getTime()) /1000;
if(t>=60&&t<3600){
System.out.println("相差:"+t/60+"分钟");
}else if(t>=3600&&t<(3600*24)){
System.out.println("相差:"+t/3600+"小时");
}else if(t>=(3600*24)){
System.out.println("相差:"+t/(3600*24)+"天");
}else{
System.out.println("相差:"+t+"秒");
}
} catch (ParseException e) {
e.printStackTrace();
}
}

}
cao_david 2007-06-18
  • 打赏
  • 举报
回复
首先格式化成“年-月-日”形式
SimpleDateFormat smdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date start = smdf.parse("2005-09-28 23:59:59");
Date end = smdf.parse("2005-09-29 00:00:00");
long t = (end.getTime() - start.getTime()) / (3600 * 24 * 1000);
System.out.println(t);
} catch (ParseException e) {
e.printStackTrace();
}
上述时间虽然只差1秒钟,但是按照上述方法计算却相差一天!!!

如果计算相差小时数格式化改为"yyyy-MM-dd hh" ;计算改为:long t = (end.getTime() - start.getTime()) / (3600 * 1000);
其它可以一次类推了



sbnth 2007-06-18
  • 打赏
  • 举报
回复
// total millseconds of one day
public static final long DAY_MILLSECONDS = 24 * 3600 * 1000;

/**
* Get the absolute day diff
* @return
* @param calEnd
* @param calStart
* <br/> e.g: calStart = 2005/11/01 09:00:00
* <br/> calEnd = 2005/11/06 00:00:00
* <br/> then return 5, not 4
*/
public static int getAbsDayDiff(Calendar calStart, Calendar calEnd) {
Calendar start = (Calendar)calStart.clone();
Calendar end = (Calendar)calEnd.clone();

start.set(start.get(Calendar.YEAR), start.get(Calendar.MONTH), start.get(Calendar.DATE), 0, 0, 0);
start.set(Calendar.MILLISECOND, 0);

end.set(end.get(Calendar.YEAR), end.get(Calendar.MONTH), end.get(Calendar.DATE), 0, 0, 0);
end.set(Calendar.MILLISECOND, 0);

return (int)((end.getTimeInMillis() - start.getTimeInMillis()) / DAY_MILLSECONDS);
}
dr_lou 2007-06-18
  • 打赏
  • 举报
回复
用SQL算简单 datediff
风中叶的思考 2007-06-18
  • 打赏
  • 举报
回复
public static String computeDateInterval(long time1, long time2)
{
long time = time2 - time1;
time = time / 1000; // 将毫秒转化为秒

long second = time % 60; // 秒
time = time / 60;

long minute = time % 60; // 分
time = time / 60;

long hour = time % 24; // 小时
time = time / 24;

long day = time; // 天

String result = "";

if (0 != day)
{
result += day + " days ";
}
if (0 != hour)
{
result += hour + " hours ";
}
if (0 != minute)
{
result += minute + " minutes ";
}
if (0 != second)
{
result += second + " seconds ";
}

return result;

}
zqpsswh 2007-06-18
  • 打赏
  • 举报
回复
运用Calendar类
jacky_tian 2007-06-17
  • 打赏
  • 举报
回复
其实我的意思就是想知道结束日期是明天还是后天或者大后天等等
jacky_tian 2007-06-17
  • 打赏
  • 举报
回复
很奇怪,如下面
Date start = smdf.parse("2005-09-28 13:15");
Date end = smdf.parse("2005-09-29 0:13");
long startDays=start.getTime() / (3600 * 24 * 1000);等于13054
long endDays=end.getTime() / (3600 * 24 * 1000);也等于13054
jacky_tian 2007-06-17
  • 打赏
  • 举报
回复
to CrazyGou(从前,有个人叫小蔡,被放了一夜,馊了)
不对,应该得到8才对。
如果要加一的话,那么当日的又不对了
CrazyGou 2007-06-17
  • 打赏
  • 举报
回复
SimpleDateFormat smdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Date start = smdf.parse("2005-09-28 23:15");
Date end = smdf.parse("2005-10-06 00:13");
long t = (end.getTime() - start.getTime()) / (3600 * 24 * 1000);
System.out.println(t);
} catch (ParseException e) {
e.printStackTrace();
}
aChinese 2007-06-17
  • 打赏
  • 举报
回复
public getTime() :Number.
返回指定的Date 对象自1970 年1 月1 日午夜(通用时间)以来的毫秒数。

看这个定义, 但是请注意, 我们是在东8区, 所以嘛, 那个0点, 对我们来说,就是8点

Date start = smdf.parse("2005-09-28 13:15");
Date end = smdf.parse("2005-09-29 01:13");

2005-09-29 过了 8点, 才算第二天, 这是偶的理解
jacky_tian 2007-06-17
  • 打赏
  • 举报
回复
to aChinese(一个中国人)
按照你说的方法,舍去时分秒,得到的结果是对的。但是还是不能解释下面的问题:
Date start = smdf.parse("2005-09-28 13:15");
Date end = smdf.parse("2005-09-29 01:13");
long startDays=start.getTime() / (3600 * 24 * 1000);等于13054
long endDays=end.getTime() / (3600 * 24 * 1000);也等于13054

因为就算去尾也不能把整日的去掉吧
CrazyGou 2007-06-17
  • 打赏
  • 举报
回复
SimpleDateFormat smdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date start = smdf.parse("2005-09-28 23:15");
Date end = smdf.parse("2005-10-06 00:13");
long t = (end.getTime() - start.getTime()) / (3600 * 24 * 1000);
System.out.println(t);
} catch (ParseException e) {
e.printStackTrace();
}
aChinese 2007-06-17
  • 打赏
  • 举报
回复
笨, 舍入的问题.
不足一天的是不是要按一天算?

如果是, 那么把日期的时分秒都舍去, 这样算出来就对了

81,092

社区成员

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

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