java计算日期差

java计算日期差

QQ知识库QQ活动网2021-04-09 08:12:288300A+A-

JAVA怎么计算两个时间的差?

方法一: DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date d1 = df.parse("2004-03-26 13:31:40"); Date d2 = df.parse("2004-01-02 11:30:24"); long diff = d1.getTime() - d2.getTime(); long days = diff / (1000 * 60 * 60 * 24); } catch (Exception e) { } 方法二: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date now = df.parse("2004-03-26 13:31:40"); java.util.Date date=df.parse("2004-01-02 11:30:24"); long l=now.getTime()-date.getTime(); long day=l/(24*60*60*1000); long hour=(l/(60*60*1000)-day*24); long min=((l/(60*1000))-day*24*60-hour*60); long s=(l/1000-day*24*60*60-hour*60*60-min*60); System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒"); 方法三: SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date begin=dfs.parse("2004-01-02 11:30:24"); java.util.Date end = dfs.parse("2004-03-26 13:31:40"); long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒 long day1=between/(24*3600); long hour1=between%(24*3600)/3600; long minute1=between%3600/60; long second1=between%60/60; System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒"); 方法挺多的,能有你要的结果就行。

我的思路:在java里面任何完整的日期都可以转化成毫秒, 然后利用毫秒之差就可以算出这2个日期的差额, 但题目里面没有天,只有时分秒, 所以我们可以分别在时分秒加上年月日,使之组成一个完整的日期就可以进行计算了。 以下是我的代码,可以直接拷贝在eclipse里运行。 p.s:你的代码我看了,没有什么问题,可能是在网站里面运行,你不应该有main函数之类的东西吧,应该用servlet啊。 package com.testtimeinterval; import java.io.bufferedreader; import java.io.inputstreamreader; import java.text.simpledateformat; import java.util.date; public class testtimeinterval { public static void main(string[] args) { try { // 得到系统输入的内容 system.out.println("请输入入睡时刻,用:隔开:"); inputstreamreader isr_begin = new inputstreamreader(system.in); bufferedreader br_begin = new bufferedreader(isr_begin); string begininputvalue = br_begin.readline(); system.out.println("入睡时间为:" + begininputvalue); system.out.println("请输入起床时刻,用:隔开:"); inputstreamreader isr_end = new inputstreamreader(system.in); bufferedreader br_end = new bufferedreader(isr_end); string wakeupinputvalue = br_end.readline(); system.out.println("起床时间为:" + wakeupinputvalue); // 1.将入睡时间拼接成一个完整的日期 string sleeptimestr = getcurrday() + " " + begininputvalue; // 1.1转换成日期格式 date sleeptime = convertstrtodate(sleeptimestr); // 2.将起床时间拼接成一个完整的日期 string wakeuptimestr = getcurrday() + " " + wakeupinputvalue; // 2.1转换成日期格式 date wakeuptime = convertstrtodate(wakeuptimestr); // 计算2个日期之差 long interval = wakeuptime.gettime() - sleeptime.gettime(); system.out.println("相差的毫秒是:" + interval); // 3.将long转化成时分秒 // 3.1先得到时 int hour = new long(interval / (1000 * 60 * 60)).intvalue(); // 3.2再得到分 int templeft_minute = new long(interval % (1000 * 60 * 60)) .intvalue(); // 3.2.1 得到分 int minute = new long(templeft_minute / (1000 * 60)).intvalue(); // 4.1 得到秒 int templeft_second = new long(templeft_minute % (1000 * 60)) .intvalue(); // 4.2.1 得到分 int second = new long(templeft_second / 1000).intvalue(); system.out.println("睡觉的时间为" + hour + "时," + minute + "分," + second + "秒"); } catch (exception e) { e.printstacktrace(); } } private static string getcurrday() throws exception { simpledateformat sdf = new simpledateformat("yyyy-mm-dd"); return sdf.format(new date()); } private static date convertstrtodate(string datestr) throws exception { simpledateformat sdf = new simpledateformat("yyyy-mm-dd hh:mm:ss"); return sdf.parse(datestr); } }

Calendar ca=Calendar.getInstance(); Calendar ca1=Calendar.getInstance(); ca.set(2002,1,1); ca1.set(2002,1,2); long l=(ca1.getTime().getTime()-ca.getTime().getTime()); System.out.println(l/(3600*1000)); //算出来的是隔多少小时 如果你要算更细的话,就3600*1000这个变化一下就行

去时间的秒数 在相减 再换算成时间

java计算日期差

java中计算两个日期之间差的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; class Test2 { public static String getDate(){ SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd"); Date dd = new Date(); return ft.format(dd); } public static long getQuot(String time1, String time2){ long quot = 0; SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd"); try { Date date1 = ft.parse( time1 ); Date date2 = ft.parse( time2 ); quot = date1.getTime() - date2.getTime(); quot = quot / 1000 / 60 / 60 / 24; } catch (ParseException e) { e.printStackTrace(); } return quot; } public static void main(String[] args) throws Exception { String date1 = "2008/8/8"; String date2 = getDate(); long day = getQuot(date1,date2); System.out.println( "距离 "+date1+" 还有 "+day+" 天" ); } } 你看一下这段代码,是从今天到2008/8/8的天数。 Date的getTime()方法返回自1970年1月1日午夜(通用时间)以来的毫秒数。 用2008/8/8的getTime()减去今天的getTime()就是这两天相差的毫秒数,1秒=1000毫秒,1分钟=60秒,1小时=60分钟,1天=24小时,然后除除除就得到天数了。

看完了jdk的help,发现sun没有提供这样的一个函数,朋友给了几个实现方法//取得剩余天数 SimpleDateFormat df=new SimpleDateFormat("yyyymmdd"); Date d0=new java.util.Date(); Date d1=df.parse(end_date); long time0=d0.getTime(); long time1=d1.getTime(); System.out.println((time1-time0)/(1000*60*60*24)); 这样算两个时间相差的天数比较好 /** * 计算两个日期之间相差的天数** @param date1 * @param date2* @return*/public static int diffdates(Date date1, Date date2) { int result = 0; ElapsedTime et = new ElapsedTime(); GregorianCalendar gc1 = new GregorianCalendar(); GregorianCalendar gc2 = new GregorianCalendar(); gc1.setTime(date1); gc2.setTime(date2); result = et.getDays(gc1, gc2); return result;}然后ElapseTime中的方法是: public int getDays(GregorianCalendar g1, GregorianCalendar g2) { int elapsed = 0; GregorianCalendar gc1, gc2; if (g2.after(g1)) { gc2 = (GregorianCalendar) g2.clone(); gc1 = (GregorianCalendar) g1.clone();} else {gc2 = (GregorianCalendar) g1.clone(); gc1 = (GregorianCalendar) g2.clone(); } gc1.clear(Calendar.MILLISECOND); gc1.clear(Calendar.SECOND); gc1.clear(Calendar.MINUTE); gc1.clear(Calendar.HOUR_OF_DAY); gc2.clear(Calendar.MILLISECOND); gc2.clear(Calendar.SECOND); gc2.clear(Calendar.MINUTE); gc2.clear(Calendar.HOUR_OF_DAY); while (gc1.before(gc2)) { gc1.add(Calendar.DATE, 1);elapsed++;}return elapsed;}其实使用joda最简单public boolean isRentalOverdue(DateTime datetimeRented) {

在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。 调用方式: 代码如下 复制代码 long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式 long date2 = getDateTime("20121212"); int day = dateInterval(date1, date2); System.out.println(day); 具体实现方法调用: 代码如下 复制代码 /** * 计算出两个日期之间相差的天数 * 建议date1 大于 date2 这样计算的值为正数 * @param date1 日期1 * @param date2 日期2 * @return date1 - date2 */ public static int dateInterval(long date1, long date2) { if(date2 > date1){ date2 = date2 + date1; date1 = date2 - date1; date2 = date2 - date1; } // Canlendar 该类是一个抽象类 // 提供了丰富的日历字段 // 本程序中使用到了 // Calendar.YEAR 日期中的年份 // Calendar.DAY_OF_YEAR 当前年中的天数 // getActualMaximum(Calendar.DAY_OF_YEAR) 返回今年是 365 天还是366天 Calendar calendar1 = Calendar.getInstance(); // 获得一个日历 calendar1.setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当前时间值。 Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(date2); // 先判断是否同年 int y1 = calendar1.get(Calendar.YEAR); int y2 = calendar2.get(Calendar.YEAR); int d1 = calendar1.get(Calendar.DAY_OF_YEAR); int d2 = calendar2.get(Calendar.DAY_OF_YEAR); int maxDays = 0; int day = 0; if(y1 - y2 > 0){ day = numerical(maxDays, d1, d2, y1, y2, calendar2); }else{ day = d1 - d2; } return day; } /** * 日期间隔计算 * 计算公式(示例): * 20121201- 20121212 * 取出20121201这一年过了多少天 d1 = 天数 取出20121212这一年过了多少天 d2 = 天数 * 如果2012年这一年有366天就要让间隔的天数+1,因为2月份有29日。 * @param maxDays 用于记录一年中有365天还是366天 * @param d1 表示在这年中过了多少天 * @param d2 表示在这年中过了多少天 * @param y1 当前为2012年 * @param y2 当前为2012年 * @param calendar 根据日历对象来获取一年中有多少天 * @return 计算后日期间隔的天数 */ public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){ int day = d1 - d2; int betweenYears = y1 - y2; List d366 = new ArrayList(); if(calendar.getActualMaximum(Calendar.DAY_OF_YEAR) == 366){ System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_YEAR)); day += 1; } for (int i = 0; i < betweenYears; i++) { // 当年 + 1 设置下一年中有多少天 calendar.set(Calendar.YEAR, (calendar.get(Calendar.YEAR)) + 1); maxDays = calendar.getActualMaximum(Calendar.DAY_OF_YEAR); // 第一个 366 天不用 + 1 将所有366记录,先不进行加入然后再少加一个 if(maxDays != 366){ day += maxDays; }else{ d366.add(maxDays); } // 如果最后一个 maxDays 等于366 day - 1 if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){ day -= 1; } } for(int i = 0; i < d366.size(); i++){ // 一个或一个以上的366天 if(d366.size() >= 1){ day += d366.get(i); } } return day; } /** * 将日期字符串装换成日期 * @param strDate 日期支持年月日 示例:yyyyMMdd * @return 1970年1月1日器日期的毫秒数 */ public static long getDateTime(String strDate) { return getDateByFormat(strDate, "yyyyMMdd").getTime(); } /** * @param strDate 日期字符串 * @param format 日期格式 * @return Date */ public static Date getDateByFormat(String strDate, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); try{ return (sdf.parse(strDate)); }catch (Exception e){ return null; } } 例2 代码如下 复制代码 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test16 { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1=sdf.parse("2012-09-08 10:10:10"); Date d2=sdf.parse("2012-09-15 00:00:00"); System.out.println(daysBetween(d1,d2)); System.out.println(daysBetween("2012-09-08 10:10:10","2012-09-15 00:00:00")); } /** * 计算两个日期之间相差的天数 * @param smdate 较小的时间 * @param bdate 较大的时间 * @return 相差天数 * @throws ParseException */ public static int daysBetween(Date smdate,Date bdate) throws ParseException { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); smdate=sdf.parse(sdf.format(smdate)); bdate=sdf.parse(sdf.format(bdate)); Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** *字符串的日期格式的计算 */ public static int daysBetween(String smdate,String bdate) throws ParseException{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(smdate)); long time1 = cal.getTimeInMillis(); cal.setTime(sdf.parse(bdate)); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } } 例3 代码如下 复制代码 //取得剩余天数 SimpleDateFormat df=new SimpleDateFormat("yyyymmdd"); Date d0=new java.util.Date(); Date d1=df.parse(end_date); long time0=d0.getTime(); long time1=d1.getTime(); System.out.println((time1-time0)/(1000*60*60*24)); 这样算两个时间相差的天数比较好 代码如下 复制代码 /** * 计算两个日期之间相差的天数 * * @param date1 * @param date2 * @return */ public static int diffdates(Date date1, Date date2) { int result = 0; ElapsedTime et = new ElapsedTime(); GregorianCalendar gc1 = new GregorianCalendar(); GregorianCalendar gc2 = new GregorianCalendar(); gc1.setTime(date1); gc2.setTime(date2); result = et.getDays(gc1, gc2); return result; } 然后ElapseTime中的方法是: 代码如下 复制代码 public int getDays(GregorianCalendar g1, GregorianCalendar g2) { int elapsed = 0; GregorianCalendar gc1, gc2; if (g2.after(g1)) { gc2 = (GregorianCalendar) g2.clone(); gc1 = (GregorianCalendar) g1.clone(); } else { gc2 = (GregorianCalendar) g1.clone(); gc1 = (GregorianCalendar) g2.clone(); } gc1.clear(Calendar.MILLISECOND); gc1.clear(Calendar.SECOND); gc1.clear(Calendar.MINUTE); gc1.clear(Calendar.HOUR_OF_DAY); gc2.clear(Calendar.MILLISECOND); gc2.clear(Calendar.SECOND); gc2.clear(Calendar.MINUTE); gc2.clear(Calendar.HOUR_OF_DAY); while (gc1.before(gc2)) { gc1.add(Calendar.DATE, 1); elapsed++; } return elapsed; } 其实使用joda最简单 代码如下 复制代码 public boolean isRentalOverdue(DateTime datetimeRented) { Period rentalPeriod = Period.days(2); return datetimeRented.plus(rentalPeriod).isBeforeNow() }

java计算日期差

java 计算两个时间之间的差。

请问time1 = "23:50";time2 = "00:20";中的time2有可能是第N天的时间吗,N>2

跨日的 import java.util.Date; public class Test { public static void main(String[] args) { String time1 = "23:50"; String time2 = "00:20"; Date date1 = new Date(); Date date2 = new Date(); date1.setDate(1);//假定日期为1号 date1.setHours(23);//第一个小时 date1.setMinutes(50);//第一个分 date2.setDate(date1.getDate()+1);//第二天为2号 date2.setHours(0);//第二个小时 date2.setMinutes(20);//第二个分 long dt1MillSeconds = date1.getTime(); long dt2MillSeconds = date2.getTime(); int julianSeconds = (int) (dt2MillSeconds - dt1MillSeconds)/60/1000;//相差分数 System.out.println(julianSeconds); } } ------------- 30

package Test5; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class TestDate { public static void main(String[] args) throws ParseException { String time1 = "22:50"; String time2 = "00:20"; Date firDate = new Date(); Date secDate = new Date(firDate.getTime()+24*60*60*1000); SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd hh:mm"); String firDateStr = f.format(firDate).replaceFirst("\d{2}:\d{2}", time1); String secDateStr = f.format(secDate).replaceFirst("\d{2}:\d{2}", time2); long diff = Math.abs(f.parse(secDateStr).getTime() - f.parse(firDateStr).getTime()); int min = (int)diff/1000/60; System.out.println("相差的分钟:"+min); } } 不考虑如何异常判断的情况

import java.text.parseexception; import java.text.simpledateformat; import java.util.date; class test2 { public static string getdate(){ simpledateformat ft = new simpledateformat("yyyy/mm/dd"); date dd = new date(); return ft.format(dd); } public static long getquot(string time1, string time2){ long quot = 0; simpledateformat ft = new simpledateformat("yyyy/mm/dd"); try { date date1 = ft.parse( time1 ); date date2 = ft.parse( time2 ); quot = date1.gettime() - date2.gettime(); quot = quot / 1000 / 60 / 60 / 24; } catch (parseexception e) { e.printstacktrace(); } return quot; } public static void main(string[] args) throws exception { string date1 = "2008/8/8"; string date2 = getdate(); long day = getquot(date1,date2); system.out.println( "距离 "+date1+" 还有 "+day+" 天" ); } } 你看一下这段代码,是从今天到2008/8/8的天数。 date的gettime()方法返回自1970年1月1日午夜(通用时间)以来的毫秒数。 用2008/8/8的gettime()减去今天的gettime()就是这两天相差的毫秒数,1秒=1000毫秒,1分钟=60秒,1小时=60分钟,1天=24小时,然后除除除就得到天数了。

java计算日期差

点击这里复制本文地址 QQ知识库【java计算日期差】专题包括了JAVA怎么计算两个时间的差?,java中计算两个日期之间差的天数,java 计算两个时间之间的差。等知识的集合,学无止境,祝你天天进步。以上内容由QQ生活网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

QQ生活网 © All Rights Reserved.  Copyright www.110go.com Rights Reserved.
Powered by QQ生活网 辽ICP备15018554号-4
网站地图|