-
2017-12-08 16:21:19
近期在自己写的一个项目中,发现了一个Bug.日期A的时间为2017-12-7,日期B的时间为2018-1-7。计算两者之间相距多少天,居然是惊人的8900天。
错误的程序如下:
import java.util.Date SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date date1 = new Date(1512619200000l);//1512619200000l是2017/12/07 12:00:00 的UTC时间表示 Date date2 = new Date(1515384000000l);//1515384000000l是2018/1/8 12:00:00 的UTC时间表示 long startDay = Long.parseLong(sdf.format(date1)); long endDay = Long.parseLong(sdf.format(date2)); System.out.println(startDay); System.out.println(endDay); System.out.println(endDay-startDay); -----运行结果如下----- 20171207 20180108 8901
不知道这么2b的程序是怎么写出来的!!
sdf.format(date1)调用SimpleDateFormat 的父类DateFormat的format(Date date)方法,将日期格式成指定的形式并返回String.
Long.parseLong()将String转化为有符号十进制,返回long
显然,两个日期用十进制的形式相减是不合适的。最终实现如下:参考了某个网友的代码。
public getInterval(Date begin_date, Date end_date) throws Exception{ long day = 0; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); if(begin_date != null){ String begin = sdf.format(begin_date); begin_date = sdf.parse(begin); } if(end_date!= null){ String end= sdf.format(end_date); end_date= sdf.parse(end); } day = (end_date.getTime()-begin_date.getTime())/(24*60*60*1000); return day; }
先将Date格式化为只有年、月、日的形式,返回String。然后将此String再转化为Date(此时时、分、秒就成为了00:00:00)
调用getTime()方法返回Date的1970的毫秒表示。将两个日期的毫秒相减,然后除以一天有(24*60*60*1000)毫秒,得到日期差。更多相关内容 -
JAVA计算两个日期相差多少天
2020-12-31 01:02:02前言 有时候我们在JAVA中会比较两个日期相差多少天,这里有几个实现方法供大家参考,偶尔会用到,也当做自己收藏。btw,同时也要鄙视一下我的好基友从百度... * JAVA计算两个日期相差多少天(by date) * @author zhengk前言
有时候我们在JAVA中会
比较两个日期相差多少天
,这里有几个实现方法供大家参考,偶尔会用到,也当做自己收藏。btw,同时也要鄙视一下我的好基友从百度搜到的一个答案的作者,写了毒代码,计算个日期而已,竟然要遍历两个日期的time。解决方案
有使用
Calendar
的,也有使用Date
的,都ok。但是基本都是去获取Time进行计算。Calendar也可以换成LocalCalendar等等的。/** * JAVA计算两个日期相差多少天(by date) * @author zhengkai.blog.csdn.net */ public static int daysBetween(Date date1,Date date2){ Calendar cal = Calendar.getInstance(); cal.setTime(date1); long time1 = cal.getTimeInMillis(); cal.setTime(date2); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** * JAVA计算两个日期相差多少天(by Date String with format "yyyy-MM-dd") * @author zhengkai.blog.csdn.net */ public static int daysBetween(String date1str,String date2str){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = format.parse(date1str); Date date2 = format.parse(date2str); int a = (int) ((date1.getTime() - date2.getTime()) / (1000*3600*24)); return a; } /** * JAVA比较两个日期(使用hutool库的DateUtil) * @author zhengkai.blog.csdn.net */ if(DateUtil.compare(date1,date2)>0){ //如果date1>=date2 }else{ //如果date1<date2 }
批斗
以下是
有害代码,引以为戒
。真的是一天一天去遍历的…public static int getDaysForTwoDate2(Date firstDate,Date secondDdate) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(firstDate); int cnt = 0; while(calendar.getTime().compareTo(secondDdate)>0){ calendar.add(Calendar.DATE, 1); cnt++; } System.out.println(cnt); return cnt; }
-
java 两个日期之间相差的天数计算
2021-12-13 14:40:04项目开发过程中经常遇到这类需求,计算两个日期之间的差,今天我系统总结一下这个技术点: 1、两个日期之间相差的天数,日期为单位(比如相差两秒,可能就相差一天,1.12:23:59:59和13:01:00:00就相差一天): ...项目开发过程中经常遇到这类需求,计算两个日期之间的差,今天我系统总结一下这个技术点:
1、两个日期之间相差的天数,日期为单位(比如相差两秒,可能就相差一天,1.12:23:59:59和13:01:00:00就相差一天):
/** * date2比date1多的天数 * @param date1 * @param date2 * @return */ private static int differentDays(Date date1,Date date2) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); int day1= cal1.get(Calendar.DAY_OF_YEAR); int day2 = cal2.get(Calendar.DAY_OF_YEAR); int year1 = cal1.get(Calendar.YEAR); int year2 = cal2.get(Calendar.YEAR); if(year1 != year2) {//同一年 int timeDistance = 0 ; for(int i = year1 ; i < year2 ; i ++) { if(i%4==0 && i%100!=0 || i%400==0) //闰年 { timeDistance += 366; } else //不是闰年 { timeDistance += 365; } } return timeDistance + (day2-day1) ; } else {// 不同年 System.out.println("判断day2 - day1 : " + (day2-day1)); return day2-day1; } }
2、两个日期之间相差的天数,以毫秒数精确计算(比如相差22小时可能是同一天):
/** * 通过秒毫秒数判断两个时间的间隔的天数 * @param date1 * @param date2 * @return */ public static int differentDaysByMillisecond(Date date1,Date date2) { int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24)); return days; }
3、两个日期是否是同一天()
public static boolean isSameDay(Date date1, Date date2) { LocalDate localDate1 = date1.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDate(); LocalDate localDate2 = date2.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDate(); return localDate1.isEqual(localDate2); }
另一种方式
public static boolean isSameDay(Date date1, Date date2) { SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd"); return fmt.format(date1).equals(fmt.format(date2)); }
判断日期是否是同一天,也可以参考这篇文章,方法比较全:
4、计算当前日期或者某个日期的前一天、一月、一年等
Calendar ca = Calendar.getInstance();//得到一个Calendar的实例 ca.set(2009, 11, 31);//月份是从0开始的,所以11表示12月 Date now = ca.getTime(); //ca.setTime(new Date()); //设置时间为当前时间 ca.add(Calendar.YEAR, -1); //年份减1 ca.add(Calendar.MONTH, -1); //月份减1 Date lastMonth = ca.getTime(); //结果 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sf.format(now)); System.out.println(sf.format(lastMonth));
这种情况可能有问题:比如当前时间是2021-12-31,你在月份上减1变成了2021-12-1”,我亲自试了一下没有出现这样的问题,大家可以留意一下。
-
Python计算两个日期之间相差的天数
2020-10-06 19:38:05那么不使用Python提供的库该怎么计算呢,笔者这里想了一种方法,以较早日期所在年的第一天作为起点,分别计算两个日期相对这一天的天数,然后把得到的相对天数相减,这样就能得到两个日期之间相差的天数。...Python提供的有关时间的库可以帮助我们方便地计算出两个日期之间的天数,那么不使用Python提供的库该怎么计算呢,笔者这里想了一种方法,以较早日期所在年的第一天作为起点,分别计算两个日期相对这一天的天数,然后把得到的相对天数相减,这样就能得到两个日期之间相差的天数。
import numpy as np def datedistance(day1, day2): # day2是日期较大的一天,day1是日期较小的一天 year = np.linspace(day1[0], day2[0], day2[0]-day1[0]+1).astype(int) flag1 = np.zeros((12,)) for i in range(day1[1]-1): flag1[i] = 1 flag2 = np.zeros((12,)) for i in range(day2[1]-1): flag2[i] = 1 year1 = 0 if (day1[0] % 4 == 0 and day1[0] % 100 != 0) or (day1[0] % 400 == 0 and day1[0] % 100 == 0): for j in range(12): year1 += flag1[j]*month1[j] else: for j in range(12): year1 += flag1[j]*month2[j] year1 += day1[2] year2 = 0 if (day2[0] % 4 == 0 and day2[0] % 100 != 0) or (day2[0] % 400 == 0 and day2[0] % 100 == 0): for j in range(12): year2 += flag2[j]*month1[j] else: for j in range(12): year2 += flag2[j]*month2[j] year2 += day2[2] for item in year[:-1]: if (item % 4 == 0 and item % 100 != 0) or (item % 400 == 0 and item % 100 == 0): year2 += 366 else: year2 += 365 return int(year2 - year1) month1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 闰年 month2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 普通年 print('请输入较前日期的年份,月份,日期(示例:2020,1,25):') a1, b1, c1 = map(int, input('输入年月日,用逗号隔开:').split(',')) d1 = [a1, b1, c1] print('请输入较后日期的年份,月份,日期(示例:2020,1,25):') a2, b2, c2 = map(int, input('输入年月日,用逗号隔开:').split(',')) d2 = [a2, b2, c2] print('{}年{}月{}日和{}年{}月{}日之间有{}天'.format(a1, b1, c1, a2, b2, c2, datedistance(d1, d2)))
计算结果如下图所示:
计算一下今天到今年年底有多少天
今天到今年年底是86天 -
python 计算两个日期之间的天数差(datetime、parse、rrule)、秒数差、周数差、月数差、年数差
2020-09-23 21:39:41python 两个日期之间的天数差、周数差、月数差、年数差 1、天数差(datetime、parse、rrule) import datetime as dt from dateutil import parser from dateutil import rrule ###################################... -
Java8 计算两个日期之间相差多少天
2021-02-28 17:46:07在使用Java8 新特性中关于Period.between的方法时需注意该方法获取日期的区间问题。html@Testpublic void test1(){LocalDate from = LocalDate.of(2018,10,1);System.out.println(Period.between(from,LocalDate.now... -
java中如何计算出两个日期之间相差多少天
2020-08-05 10:33:34思路就是根据它们相bai差的毫秒数除以每天du的毫秒数(60*60*24*1000),代码zhi如下: public static void main(String[] args) throws ParseException { String date1="1987-01-01"; String date2="2010-01-01";... -
C# 计算两个日期之间相差的天数
2013-08-29 11:47:14用C#计算两个日期之间相差的天数,通过TimeSpan进行计算比较简单 -
计算两个日期之间,相差多少天C语言详解
2019-12-27 16:03:58问题描述:如2019-12-27与2017-11-7,相差780天。.../*计算两个日期之间相差多少天*/ struct date { int years; int months; int days; }; int days_on_month[13] = { 0,31,28,31,30,31,30,31,3... -
计算两个日期之间的天数(oracle中计算两个日期之间的天数)
2021-05-06 04:44:57excel表格怎么计算两个日期之间的天数?以计算距国庆日期为例:见图一1、在F5单元格输入公式:E5-D52、在F5单元格单击右键,在菜单中选择:设置单元格格式...这时会跳出单元格设置对话框见图二在对话框中选择:数值... -
java计算两个日期相差的天数
2021-11-25 14:39:17计算不是通过时间戳24小时为一天,单纯是计算两个日期之前相差的天数,例如,2021年11月25日和2021年12月1日相差多少天: /** * date2比date1多的天数 * @param date1 * @param date2 * @return */ ... -
python计算两个日期之间的天数、月数相差
2019-06-26 17:52:05import datetime def days(str1,str2): date1=datetime.datetime.strptime(str1[0:10],"%Y-%m-%d") date2=datetime.datetime.strptime(str2[0:10],"%Y-%m-%d") num=(date1-date2).days return num ... -
Python 计算两个日期相差的天数
2021-10-21 13:49:14有时候需要算两个日期相差多少天,如果两个日期相差大,真的去数肯定很麻烦,还得计算有的是有三十天,有的是三十一天,还有闰年和平年的区别。而这时候如果有一个方法或者函数,只需要输入要计算的两个日期即可,那... -
js计算2个日期之间相差多少天
2021-11-12 17:04:52计算2个日期之间相差多少天 <script> function getDays(strDateStart, strDateEnd) { var strSeparator = "-"; //日期分隔符 var oDate1; var oDate2; var iDays; oDate1 = strDateStart.split... -
C语言 计算两个日期相差的天数
2019-03-02 12:36:22个人博客,最近新建的。 计算两个固定格式日期之间相差...首先计算两个日期年之间相差的天数,分两种情况:如果month1<month2, 则计算之后使得year1=year2; 如果month1>month2,则计算后使得year1=ye... -
【Python】计算两个日期相差天数
2021-06-25 07:31:51只要三个字母对应所给字符串的位置,即可正确计算。分隔符也可自定义,可以是%或-,也可以是其他字符 (1)举例一 import datetime str1 ='4/3/2019' str2 ='4/3/2018' date1=datetime.datetime.strptime(str1[0:... -
python 计算两个日期相差多少个月
2020-12-08 03:38:41近期,由于业务需要计算两个日期之前相差多少个月。我在网上找了很久,结果发现万能的python,居然没有一个模块计算两个日期的月数,像Java、C#之类的高级语言,都会有(date1-date2).months的现成方法,觉得不可思议... -
Python编程题5--计算两个日期之间相隔的天数
2020-12-19 20:42:27题目已知任意两个日期,计算出两个日期之间相隔的天数。实现思路1这里我们运用 Python 里面内置模块 time 来处理问题。已知2个日期,格式为 yyyy-mm-dd通过 time.strptime() 方法,把日期时间字符串解析为时间元组... -
java计算两个日期之间相差天数和相隔天数详解
2021-03-13 13:43:02大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,”相差“和"相隔"是有区别的,然而就是这些区别害死很多人,却没有发现,在大量新增统计时是差之毫厘谬以千里,我能都发现是因为... -
Java 8计算两个日期之间的月份
2021-07-15 16:26:15在上述两个日期之间的91天持续时间,期望代码返回3个月的持续时间,但是以下方法仅返回2个月。这是Java 8中的bug 吗?日期为91天,却仅返回2个月。 Period diff = Period.between(LocalDate.parse("2021-08-31"), ... -
c++计算两个日期之间的天数差
2020-02-22 16:24:27有两个日期,求两个日期之间的天数,如果两个日期是连续的, 我们规定他们之间的天数为两天。 输入形式为YYYYMMDD,例如: 20110412 20110422 输出为: 11 #include<stdio.h> #define ISYEAP(x) x%100!=0&... -
Java 计算两个日期之间相差的月数
2009-07-07 19:45:21Java 计算两个日期之间相差的月数 Java 计算两个日期之间相差的月数 -
Swift 计算两个日期的相隔多少天
2018-09-04 16:34:33给定两个日期,计算两个日期相隔多少天。 列子 主要利用dateComponents实现 NSCalendar.current.dateComponents(components:Set<Calendar.Component>, from: <Date>, to: <... -
c/c++ 输入两个日期,计算日期相差多少天
2020-07-09 09:27:29有两个日期,计算它们之间的差值,如果两个日期是连续的,则按照2天算。 日期格式规定为YYYYMMDD,例如20200709 2,基本思路 (1)输入两个日期 (2)以小的日期为底,每次加一天,直到与大的日期相等即可 (2.1)... -
Java简单计算两个日期月数差的方法
2021-03-15 00:17:04本文实例讲述了Java简单计算两个日期月数差的方法。分享给大家供大家参考,具体如下:/*** 获取两个日期相差的月数* @param d1 较大的日期* @param d2 较小的日期* @return 如果d1>d2返回 月数差 否则返回0*/... -
jq计算两个日期之间的时间差,多少年多少月
2019-09-18 11:08:12// JS日期系列:根据出传入的日期 ,得到当前日期与传入日期的差,返回的格式是“y年m月” // 传入参数strKeyDate要求格式为“yyyy年mm月dd日”这样的日期字符串,如果不是自行先转换,或者调整下方“传入的日期,... -
C语言计算两个日期之间相差的天数
2021-10-23 17:40:501、比较起始和结束的年份大小,起始年是否大于结束年,如果起始时间大于输入的结束时间,则把两个时间(年月日)互换值,再计算两个时间相差的天数。 2、判断是否起始时间小于结束时间,直接计算两个时间相差的天数。...