精华内容
下载资源
问答
  • 主要为大家详细介绍了java日期操作工具类,包括获取指定日期日期转换、相隔天数等操作,感兴趣的小伙伴们可以参考一下
  • 大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,”相差“和"相隔"是有区别的,然而就是这些区别害死很多人,却没有发现,在大量新增统计时是差之毫厘谬以千里,我能都发现是因为...

    大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,”相差“和"相隔"是有区别的,然而就是这些区别害死很多人,却没有发现,在大量新增统计时是差之毫厘谬以千里,我能都发现是因为一个偶然的机会,一个项目运行几年却没有人发现,我在其中还不到一年,一开始写这些这代码的人根本没分清楚什么情况就写了,怪不得统计的数据总是有那么细微的差别,在于日期”相差“和"相隔"有某些特定的情况下是相等的,有时又不相等。大家看我写那么多也是醉了。下面直接进入正题。

    两个日期之间相差天数

    平时大家都在讨论两个日期之间相差天数,网上大把代码也是关于两个日期之间相差天数,因为相差在人的脑中已经根深了,在我管理的工程里也有这样的代码,如下所示

    public static int getDiscrepantDays(Date dateStart, Date dateEnd) {

    return (int) ((dateEnd.getTime() - dateStart.getTime()) / 1000 / 60 / 60 / 24);

    }

    这个方法的功能就是传入开始和结束日期,计算相差的天数,实现思路是通过java.util.Date类的getTime()方法获得日期的毫秒数,

    然后相减dateEnd.getTime() - dateStart.getTime(),得到毫秒数的差,除以1000,得到秒数的差;再除以60,得到分钟数的差;再除以60,得到小时数的差;再除以24小时,得到天数的差。这就是计算两个日期之间相差天数的思路。网上大部分代码都和这个大同小异,下面重点解决下两个日期之间相隔天数。

    两个日期之间相隔天数

    相隔并不是相差,只要是同一天,相隔就是0,不是同一天,相隔就不是0,但对于两日期相差的天数就不一样,不是同一天,相差天数也可以为0.

    相差天数例子,

    开始日期为:2015-05-28 23:59:59,结束日期为:2015-05-29 00:00:00,相差为1秒,相差天数为0,

    开始日期为:2015-05-28 11:00:00,结束日期为:2015-05-29 10:59:59,相差天数也为0,差1秒,相差天数为1。

    相隔天数例子,

    开始日期为:2015-05-28 23:59:59,结束日期为:2015-05-29 00:00:00,相差为1秒,相隔天数为1,

    开始日期为:2015-05-28 11:00:00,结束日期为:2015-05-29 10:59:59,相差天数也为0,差1秒,相隔天数还是为1。

    到这里,读者应该知道区别在那里了吧,如果用相差天数的思路求相隔天数必然是错的。

    相隔天数的代码如下:

    3dac700462e3a0a1ce34696a93411625.png

    相隔天数的代码只要变通下,格式化加上时间,就变成了计算相差天数的代码:

    4ff9db964883629c54f53b0b4b8baceb.png

    到这里,计算两个日期之间相差天数和相隔天数实现代码已讲完。如果统计的日志数据生成在不同天的表两种方法得到结果决然不同,对于几百万级表的信息查询,得到的结果相差就非常大了。所有开发时要根据自己的业务慎重选择合适的计算方法。只能说细节决定成败!有用的话希望大家分享分享。

    展开全文
  • import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; public class Test { /** * @param args * @throws ParseException */ public stati
    package tests;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    public class Test {
    
    	/**
    	 * @param args
    	 * @throws ParseException 
    	 */
    	public static void main(String[] args) throws ParseException {
    		String st="2016-11-01";//开始日期
    		String ed="2017-01-24";//要推算的日期
    		int day=daysBetween(st,ed);//计算日期相隔天数
    		System.out.println(day);
    	}
    	/**
    	 * 计算日期相隔天数
    	 * @param smdate
    	 * @param bdate
    	 * @return
    	 */
    	public static int daysBetween(String smdate,String bdate){  
    		           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
    		           Calendar cal = Calendar.getInstance();    
    		           long time1 = 0;
    		           long time2 = 0;
    		           
    		           try{
    		                cal.setTime(sdf.parse(smdate));   
    		                time1 = cal.getTimeInMillis();    
    		               cal.setTime(sdf.parse(bdate)); 
    		               time2 = cal.getTimeInMillis();  
    		          }catch(Exception e){
    		              e.printStackTrace();
    		          }
    		          long between_days=(time2-time1)/(1000*3600*24);  
    		              
    		         return Integer.parseInt(String.valueOf(between_days));     
    	}  
    	/**
    	 * 日期相差的小时数
    	 * @param startTime
    	 * @param endTime
    	 * @return
    	 */
    	 public static int daysBetween2(String startTime, String endTime) {
    		            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH");  
    		            Calendar cal = Calendar.getInstance();    
    		            long time1 = 0;
    		            long time2 = 0;
    		            
    		            try{
    		                 cal.setTime(sdf.parse(startTime));   
    		                 time1 = cal.getTimeInMillis();    
    		                 cal.setTime(sdf.parse(endTime)); 
    		                 time2 = cal.getTimeInMillis();  
    		           }catch(Exception e){
    		               e.printStackTrace();
    		           }
    		           long between_days=(time2-time1)/(1000*3600);  
    		               
    		          return Integer.parseInt(String.valueOf(between_days));     
    	}
    }
    

    展开全文
  • 电脑现已成为我们工作、生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到如何计算两个日期相隔天数(用java实现)的问题,如果我们遇到了如何计算两个日期相隔天数(用java实现)的情况,该怎么处理怎么...

    电脑现已成为我们工作、生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到如何计算两个日期相隔的天数(用java实现)的问题,如果我们遇到了如何计算两个日期相隔的天数(用java实现)的情况,该怎么处理怎么才能解决如何计算两个日期相隔的天数(用java实现)带来的困扰呢,对于这样的问题其实我们只需要eclipsejdk1.8第一步创建一个测试工程第二步创建测试类第三步编写核心方法,计算间隔天数,间隔月份第四步创建测试类第五步测试结果:1、先将日期字符转成Date类2、getDayBetween是用后面的时间减去前面的时间这样就解决了这样的问题,接下来给大家带来如何计算两个日期相隔的天数(用java实现)的详细操作步骤。

    工具/原料

    eclipse

    jdk1.8

    方法/步骤

    第一步

    创建一个测试工程

    c83311531191be3fd7bd0a05227fc8e3.png

    第二步

    创建测试类

    fa5b90636b63184302ff73f5343b901a.png

    第三步

    编写核心方法,计算间隔天数,间隔月份

    238089bb064835284bbdf0e32d008c95.png

    9c0d569e49dd010a0fda584752852624.png

    8727c554e741ee5f7dcadae161285da6.png

    第四步

    创建测试类

    b85228ca7a465d82ee175c20008d400f.png

    第五步

    测试结果:

    3954a04474655e10013c4f4d1cad63d0.png

    注意事项

    1、先将日期字符转成Date类

    2、getDayBetween是用后面的时间减去前面的时间

    展开全文
  • * 计算两个日期之间相隔天数 * * @author zql * */ public class Test { public static void main(String[] args) { Test t = new Test(); int r = t.getDaySub(2020, 1, 1, 2020, 2, 5); System....
    /**
     * 计算两个日期之间相隔的天数
     * 
     * @author zql
     *
     */
     
    public class Test {
    
    	public static void main(String[] args) {
    		Test t = new Test();
    		int r = t.getDaySub(2020, 1, 1, 2020, 2, 5);
    		System.out.println(r);
    	}
    
    	/**
    	 * @param startYear 开始年
    	 * @param startMonth 开始月
    	 * @param startDay 开始日
    	 * @param endYear 结束年
    	 * @param endMonth 结束月
    	 * @param endDay 结束日
    	 * @return 相隔的天数
    	 */
    	public int getDaySub(int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay) {
    		// 总天数
    		int totalDay = 0;
    		// 年相等
    		if (startYear == endYear) {
    			// 月相等
    			if (startMonth == endMonth) {
    				totalDay = endDay - startDay;
    				// 月不等
    			} else {
    				for (int i = 0; i <= (endMonth - startMonth); i++) {
    					// 第一个月可能不是从1号开始,所以另算
    					if (i == 0) {
    						totalDay += (getThisYearMonthDays(startYear, startMonth) - startDay);
    						// 最后一个月可能不是从月底结束结束,所以另算
    					} else if (i == (endMonth - startMonth)) {
    						totalDay += endDay;
    					} else {
    						totalDay += getThisYearMonthDays(startYear, startMonth + i);
    					}
    				}
    			}
    			// 年不相等
    		} else {
    			for (int i = 0; i <= (endYear - startYear); i++) {
    				// 第一年
    				if (i == 0) {
    					for (int j = startMonth; j < 13; j++) {
    						int month = j;
    						int days = getThisYearMonthDays(startYear, month);
    						// 第一年的开始月份
    						if (j == startMonth) {
    							days = getThisYearMonthDays(startYear, month) - startDay;
    						}
    						totalDay += days;
    					}
    					// 最后一年
    				} else if (i == (endYear - startYear)) {
    					for (int j = 1; j <= endMonth; j++) {
    						int month = j;
    						int eDay = getThisYearMonthDays(endYear, month);
    						// 结束日期的最后一天小于最后一月的天数
    						if (j == endMonth && endDay < eDay) {
    							eDay = endDay;
    						}
    						totalDay += eDay;
    					}
    					// 中间年
    				} else {
    					int year = startYear + i;
    					if (isLeapYear(year)) {
    						totalDay += 366;
    					} else {
    						totalDay += 365;
    					}
    				}
    			}
    		}
    		return totalDay;
    	}
    
    	/**
    	 * 获取某年某月的天数
    	 * 
    	 * @param year 年份
    	 * @param month 月份
    	 * @return int类型,天数
    	 */
    	public int getThisYearMonthDays(int year, int month) {
    		if (month == 2) {
    			return isLeapYear(year) ? 29 : 28;
    		} else if (month == 4 || month == 6 || month == 9 || month == 11) {
    			return 30;
    		} else {
    			return 31;
    		}
    	}
    
    	/**
    	 * 判断是否是闰年,是返回true,不是返回false
    	 * 
    	 * @param year 年份
    	 * @return boolean 类型
    	 */
    	public boolean isLeapYear(int year) {
    		return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) ? true : false;
    	}
    }
    
    
    展开全文
  • 获取两个日期之间的天数,使用整数计量而不是毫秒数约算,例:2017-11-26 23:59:59 与2017-11-27 00:00:00相差天数是1.
  • Hi have two dates in date format, how do i get the difference of days between the two ?Date date1;Date date2 ;...解决方案The recommendation is to use JodaTime API for Dates:import java.util...
  • java8的日期工具类(获取当前时间 相隔天数 小时 分钟 秒等处理java8的日期工具类(获取当前时间 相隔天数 小时 分钟 秒等处理)package com.example.list_test;import java.text.ParseException;import java.text....
  • java获取时间天数间隔

    千次阅读 2019-08-19 16:57:26
    java涉及时间比较及差值计算的无非就是Date 、SimpleDateFormat、Calendar三个类,但都没有包含纯粹计算天数差值的方法,要么就是跟业务不匹配(明面上计算的天数,而非具体的时间差值),这里记录下在业务需求中...
  • 求两个日期之间相差的天数 利用日期类将用户输入的两个日期字符串转换成为日期格式,用相应日期类操作方法将两个日期之间相差天数计算出来。
  • 我知道有很多关于如何获得的问题,但我想要和使用新的Java 8 Date api的例子。 我也知道JodaTime库,但我想要一种没有外部库的工作方式。功能需要抱怨这些限制:防止日期保存时间错误输入是两个Date的对象(没有时间...
  • java获取连续日期天数

    2021-01-29 11:12:26
    java获取连续日期天数 判断连续登录天数 public Integer getSignDay() { List<SignDay> signDayList = signDayMapper.getSignDay() //continuousDay 连续签到数 int continuousDay = 1; boolean ...
  • //获取文件发布时间 String fbsj = ConvertUtils.createString(xmggMap.get("fbsj")).substring(0, 8); //转换为Date类型 Date date = myFormatter.parse(fbsj); //获取当前时间 Long nowDate=DateUtil....
  • java7 计算日期相隔天数的最优方法

    千次阅读 2017-06-19 22:45:28
    比如:java7需求计算相隔天数的情况有两种: ①不考虑时分秒. ②考虑时分秒的.举例:date1="2017-06-19 21:28:28", date2="2017-06-18 01:28:28".对于第一种情况,不考虑时分秒的话,上面date1和date2相差的天数为1. ...
  • 下面是编程之家 jb51.cc 通过网络收集整理的代码片段...import java.util.*;public class Test {public static void main(String args[]) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date(...
  • 列:2017-08-11 与 2017-08-15 返回 3 列:2017-08-10 与 2017-08-11 返回 0
  • //计算两日期相差天数 public int testBetweenDays(Date opDate,Date enDate) { // 获取相差的天数 Calendar calendar = Calendar.getInstance(); calendar.setTime(opDate); long timeInMi...
  • * 计算两个日期间隔天数 * * @param startTime : 开始时间 * @param endTime : 结束时间 * @return */ public static int caculateTotalTime(String startTime, String endTime) { Si...
  • package ...import java.text.ParseException;import java.text.SimpleDateFormat;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import...
  • 参考 : ... ... * 两个日期间相差的天数 这里不包含起始日期,如果想要结果包含起始日期,则需要再结果上+1 * @return */ public int getDifferenceDayCount(String startDateStr,String e...
  • 我需要找到两个日期之间的天数:一个是来自报表,另一个是当前日期。我的片段:int age=calculateDifference(agingDate, today);这calculateDifference是一个私有方法,agingDate并且today是Date对象,仅供您说明。...
  • Java获取两个日期相差的天数 Date date = new Date(); // 下面的yyyy-MM-dd是根据你自己提供的字符串来决定的,也可以改成yyyy/MM/dd SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); ...
  • 一、将日期格式化为指定的字符串./*** @param d 日期.* @param format 输出字符串格式.* @return 日期字符串*/public static String getStringFromDate(Date d, String format) {SimpleDateFormat sdf = new ...
  • 获取两个日期之间的天数: 传入两个日期获取它们之间的天数 public static double getDistanceOfTwoDate(Date before, Date after) { long beforeTime = before.getTime(); long afterTime = after.getTime(); ...
  • 传递Date类型的参数 private long getDays(Date startDate, Date endDate) { if (startDate != null && endDate != null) { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");...
  • 这是我程序中用到的方法...java/*** 读取两个日期之间的天数* @param begin yyyy-mm-dd* @param end yyyymmdd* @return*/public static int getDays(Date begin,String end) throws Exception{String strend=end.su...
  • 记录一下date日期工具类 public class DateUtil{ // ==格式到年== /** * 日期格式,年份,例如:2004,2008 */ public static final String DATE_FORMAT_YYYY = "yyyy"; // ==格式到年月 == /** * 日期格式...
  • Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。调用方式:long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式long date2 = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,927
精华内容 770
关键字:

java获取日期相隔天数

java 订阅