怎样计算两个字符串类型的日期相差的年,天,月,日,小时,分

beihua 2003-08-21 02:39:45
不能用数据库的函数!
用户输入的日期可能为:
2000-02-10 21:50:21
1987
10-1
1995-05-1
1995-05-1 20
1993-8 9:23:11
1958-10-10 5:10
88-3-04 20:11:54
即用户输入的日期的形式可能各种各样,怎样用java写一个统一的方法来求两个日期相差的年,天,月,日,小时,分?


...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dext 2003-08-24
  • 打赏
  • 举报
回复
其实,Date类型的本质是浮点数!
整数部分表示天数,小数部分表示小时分秒........
两个日期相减就相当于普通减法,
减得的差值由电脑来自动处理,你不必理会!
beihua 2003-08-24
  • 打赏
  • 举报
回复
月份除以30不准确呀?
soloxiao 2003-08-23
  • 打赏
  • 举报
回复
import java.util.Date;
public class diff_date{
public static void main(String s[]){
Date d1 = new Date("2000/01/01 05:05:00");
Date d2 = new Date("2003/11/05 15:22:05");
long a1 = d1.getTime();
long a2 = d2.getTime();
System.out.println("a1: "+a1);
System.out.println("a2: "+a2);
System.out.println("Year: " + (float)(a2-a1)/1000/60/60/24/356);
System.out.println("Month: " + (float)(a2-a1)/1000/60/60/24/30);
System.out.println("Day: " + (float)(a2-a1)/1000/60/60/24);
System.out.println("Hour: " + (float)(a2-a1)/(1000*60*60));
System.out.println("Minute: " + (a2-a1)/(1000*60));
System.out.println("Second: " + (a2-a1)/(1000));
}
}
beihua 2003-08-23
  • 打赏
  • 举报
回复
月份除以30不准确呀?
beihua 2003-08-23
  • 打赏
  • 举报
回复
每个月的天数不一样,怎样计算两个日期相差的月数?
beihua 2003-08-22
  • 打赏
  • 举报
回复
1>每个月份的天数不一样30,31,29,28天,怎样计算两个日期相差的月,相差的年?

2>能不能把用户输入的各种日期格式都转换成yyyy-MM-dd hh:mm:ss的形式?
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date a = f.parse(request.getParameter("text1");
为什么上面的方法当text1为1987,1987-02-12,1987-02-12 10:10等形式时不能解析?
miniflashow 2003-08-21
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1369/1369053.xml?temp=.5788996
beihua 2003-08-21
  • 打赏
  • 举报
回复
对每种格式都判断也太麻烦了吧?
有没有一个统一的方法?
bigbadwolf 2003-08-21
  • 打赏
  • 举报
回复
同意楼上的意见。
airforce 2003-08-21
  • 打赏
  • 举报
回复
把得到的值判断后转成时间的格式,然后
long CountDown=(curdate.getTime()-nowDate.getTime())/1000/60/60/24;
fft123 2003-08-21
  • 打赏
  • 举报
回复
自己针对用户输入的各种可能情况写判断吧
输入1987就按
SimpleDateFormat f = new SimpleDateFormat("yyyy")
Date a = f.parse("1987");
来写,但java这里就把a当作是1987年1月1号的0:00,也就是说你后面没有输入的部分全部按照初始值来初始化了,哪怕你输入的是1987-9-9,转换后也是1987-01-01
这时就必须按SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd")来写
你如果不想限制用户的输入格式就自己针对每一个可能输入的情况写条件判断吧


日期的差值倒好办,直接用两个日期的getTime()函数相减就可以了,结果是相差的毫秒数,要转成天数就除以1000*3600*24,转成其它的就除以不同的数值就行了

81,090

社区成员

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

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