有没有一种计算日期差的软件?(非天数)

作者&投稿:亓侧 (若有异议请与网页底部的电邮联系)
java中计算两个日期之间差的天数~

在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()
}

假设今天是 2004 年 6 月 9 日。您的假期从 2004 年 8 月 21 日开始,您想计算出至假期开始还有多少天。要做这个数学计算,您可以在一个空单元格中键入一个简单公式(此例中是 B5 单元格):
=A3-A2
注意;
A2 A3 必须是日期格式,B5是常规数字格式

搜索,工龄计算器。


Excel中日期求差的算法 是否从2010版本才开始修订? 2011\/4\/11 1986\/...
这种日期求差法在工作中起什么作用?不好意思,我不太懂,我一般求的是C1单元格,A1与B1之间的天数。计算利息用得多点。

Excel日期差公式 谢谢
说明TODAY()返回今天的日期(2015-12-7)。知识扩展:1、Excel 日期本身就是一个数字(日期系列号),在1900年日期系统中,数字1表示1900年1月1日,2表示1900年1月2日……,依此类推(如果没有修改,Excel默认使用1900年日期系统)。因此,如果要计算两个日期之间间隔的天数,也可以直接相减,如A1...

在excel中计算日期差工龄生日等
D1单元格公式如下:=(B1-A1)*24 E1单元格公式如下:=(B1-A1)*24*60 注意:A1和B1单元格格式要设为日期,C1、D1和E1单元格格式要设为常规.三、计算生日,假设b2为生日 =datedif(B2,today(),"y")DATEDIF函数,除Excel 2000中在帮助文档有描述外,其他版本的Excel在帮助文档中都没有...

excel有二个日期则计算日期差,如果只有一个日期如何自动计算至今的日期...
公式为:=IF(B2="",TODAY()-A2,B2-A2)如图所示:

微软office excel里的TEXT函数[d]没法计算超过30天的时间差?
可以直接在单元格用相减的方式,得到结果:B4公式:=INT(A4-A3)C4公式:=TEXT(IF(A4<>0,A4-A3,""),"hh时mm分ss秒")结果公式:=B4&"天"&C4 小结:如果只取天的话,取不到月和年的信息,信息就丢失了,这应该是软件版本的问题。望采纳,谢谢。———以下是我之前的答复(可忽略)———...

农历与公历怎么算的?比如一月份农历怎么算?有公式吗?
公历和农历之间是不能换算的,二者采用的计算方法不同,没有特殊关系可以查询,只能分别计算。阳历即太阳历,也就是公历,它是国际通用的。我国自民国元年起采用阳历,为与我国旧有之历相对称,阳历又称“新历”。阳历以地球绕太阳转一圈的时间定为一年。共365天5小时48分46妙。平年只计365天这个整数...

excel里有没有一种函数可以处理包含关系?
excel里有没有一种函数可以处理包含关系? 就是这个函数可以判断某个特定字段被包含在数据中,这样的函数有吗?或者可以起到相似作用的?比如,我想知道数据中...显示日期 DATEDIF 计算返回两个日期参数的差值。 计算天数 DAY 计算参数中指定日期或引用单元格中的日期天数。 计算天数 DCOUNT 返回数据库或列表的列中满足...

在excel 中,两个日期如何相加相减?
=DATEDIF(A2,B2,"d")。3.DATEDIF()函数知识点介绍:这个函数语法是这样的:=DATEDIF(开始日期,结束日期,第三参数),第三参数可以有若干种情况,分别可以返回间隔的天数、月数和年数。4.下面再来看一下如何计算时间。首先,最简单的是两个时间直接相减即可得到时间差。但是注意,存储结果的单元格要...

用php计算两个日期相差多少
就可以用time()函数,得到的就是现在的时间戳.第二种情况呢,就是有数据库,这样就相对比较容易一些了!如果是MSSQL可以使用触发器!用专门计算日期差的函数datediff()计算便可!如果是MYSQL那就用两个日期字段的时间戳值,进行计算后便可得到相差的天数了.方法和上面的代码很像.

年份差是什么?
计算年份差,即两个日期之间的年份差距,是历史学、考古学、人口统计学等众多学科中常见的需求。在日常生活和学术研究中,我们经常需要确定两个时间点之间的年份差距。以下是几种常用的计算年份差的数学方法和公式:直接相减法 这是最简单直接的方法。假设我们有两个年份A和B(A > B),年份差可以通过...

黄石市18393268853: 有计算间隔天数的软件吗? -
宏罗亚立: 有,时间天数计算器(计算两个日期的间隔天数) 1.0 就可以,这个小软件很简单的.这是一个很简单的实用工具,主要的功能就是计算两个日期之间实际天数,可以用于项目开发的时间预算. 下面扩展如何实现的程序代码: Js 时间间隔计...

黄石市18393268853: 求一款计算天数差的软件 -
宏罗亚立: 用Excel快速计算天数差 我们在工作中经常需要计算前后两个日期间隔的天数,比如计算某一项重要任务的倒计时.我想,您肯定也像我一样,不愿意扳着手指或拿着月历表一天一天的数吧!其实,用Excel可以很轻松地计算出两个时间的天数差...

黄石市18393268853: 有什么软件计算日期间隔的?
宏罗亚立: firstday:=dm.query2.FieldByName ('chk_day').AsDateTime; lastday:=Now; dm.Database1.StartTransaction ; try IF lastday-firstday>0 Then For p:=Trunc(firstday)+1 to Trunc(lastday) do

黄石市18393268853: 有没有计算两个日期间天数的软件?
宏罗亚立: 365日历,里面的计算器可以进行日期之间的计算

黄石市18393268853: 有没有可以计算两个日期之间间隔天数的软件? -
宏罗亚立: Excel 就可以了,不需要其他另外的软件.还可以找“倒计时”的软件.

黄石市18393268853: 有没有什么工具.能算两个日期之间隔了多少天?
宏罗亚立: 不加端点的那两天是: 29+30+31+30+31+31+13=195天

黄石市18393268853: 有没有 计算两个日期 之间相隔天数的 软件?? -
宏罗亚立: 假设今天是 2004 年 6 月 9 日.您的假期从 2004 年 8 月 21 日开始,您想计算出至假期开始还有多少天.要做这个数学计算,您可以在一个空单元格中键入一个简单公式(此例中是 B5 单元格):=A3-A2注意; A2 A3 必须是日期格式,B5是常规数字格式

黄石市18393268853: 在计算''纪念日''多少天的软件是什么 -
宏罗亚立: 计算''纪念日''多少天的软件是倒数日 Days Matter 使用步骤如下: 1、在安卓市场或者APP Store里下载倒数日 Days Matter. 2、点击软件主界面,点击右上角的加号,添加新的日子(可通过拖拽事件横栏改变事件排列的顺序).3、从上到下依次填写相关容,然后点击右上角保存,跳转到主界面,纪念日即创建成功.如果中途想退出,点击左上角的箭头,跳转到主界面.4、在主界面点击左上角的目录,可见分类信息,点击管理分类可以删除或者添加分类.5、创建完事件以后,如想对其修改或者删除,点击该行,再点击右上角的编辑可以对其更改.

黄石市18393268853: 在Excel中怎么用函数统计两个日期之间相隔的天数 -
宏罗亚立: Excel中用函数统计两个日期之间相隔的天数使用DATEDIF函数,函数的形式:DATEDIF(Start_date,End_date,Unit),计算步骤如下:1.输入两个日期之后,鼠标左键点击要输入相隔天数的单元格,注意开始日期一定要早于结束日期,如下图红框所示;2.然后在函数图标fx后面的输入框输入“=DATEDIF(A1,B1,"D")”,如下图红框所示;3.按回车键,就可以计算出两个日期之间相隔的天数,如下图红框所示;4.如果需要计算更多日期差,将日期分别输入在后面的单元格,如下图红框所示;5.然后利用填充柄,就可以迅速复制公式计算出其他的日期差,如下图红框所示.

黄石市18393268853: 找一个可以计算日子的软件 -
宏罗亚立: 不需要什么软件都可以算的,你只要算几年几个月就能很简单快捷的知道天数了,这里面有些固定公式的,你都按照公历计算就很容易啦,一年365天是固定的,月大31天月小30天我想你也该知道吧,还有就是2月份啦,有了这些计算天数不就随手拈来吗?

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网