`
liyinfeng56
  • 浏览: 93639 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

两个日期相减

 
阅读更多
在项目中经常遇到日期相减的业务,一下是几种日期想减的代码集合,希望对各位有帮助!
1.SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
  java.util.Date date= myFormatter.parse("2003-05-1"); 
  java.util.Date mydate= myFormatter.parse("1899-12-30");
  long  day=(date.getTime()-mydate.getTime())/(24*60*60*1000);




2. public int daysOfTwoDate(Date beginDate,Date endDate){ 
          int days = 0;//两个日期之前的天数 
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 
          Calendar beginCalendar = Calendar.getInstance(); 
          Calendar endCalendar = Calendar.getInstance(); 
           
          beginCalendar.setTime(beginDate); 
          endCalendar.setTime(endDate); 
          //计算天数 
          while(beginCalendar.before(endCalendar)){ 
              days++; 
              beginCalendar.add(Calendar.DAY_OF_MONTH, 1); 
          } 
          return days; 





3.
import java.util.*;
import java.text.*;
public class TestTime{
static int day=0;
static long d=0,l=0;
public static void main(String [] args){
long day=0;
TestTime a=new TestTime();
try{
day=(int)a.getCompareDate();

}catch(Exception se){
se.printStackTrace();
}
int ten=(int)day/10;
int gen=(int)day%10;

System.out.println(gen+"aa"+ten+"bb"+day);

}
public static long getCompareDate(){
Calendar cal = Calendar.getInstance();
//当前年月日
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH);
int date=cal.get(Calendar.DATE);
//System.out.println("年"+year+"月"+month+"日"+date);

cal.set(year, month, date);
Date date1=cal.getTime();
cal.set(2008,Calendar.AUGUST,8);
    Date date2=cal.getTime();
l=(date2.getTime()-date1.getTime())/(24*60*60*1000);
return l;
}
}

4.
import java.util.Scanner;

public class TestDayNum {
   
    private int startYear;
    private int startMonth;
    private int startDay;
   
    private int endYear;
    private int endMonth;
    private int endDay;
   

    private int outputStartYear;    //保存输入结果,供输出时使用
    private int outputStartMonth;
    private int outputStartDay;
   
    private int outputEndYear;
    private int outputEndMonth;
    private int outputEndDay;
   
    private int dayNum;
   
    private int tempYear;
    private int tempMonth;
    private int tempDay;
   
    Scanner scanner = new Scanner(System.in);
   
    public TestDayNum(){
        System.out.println("请输入起始日期: ");
        System.out.print("年: ");
        startYear = scanner.nextInt();
        outputStartYear = startYear;//输出时使用
       
        System.out.print("月: ");
        startMonth = scanner.nextInt();
        outputStartMonth = startMonth;
       
        System.out.print("日: ");
        startDay = scanner.nextInt();
        outputStartDay = startDay;
       
        System.out.println("请输入结束日期: ");
        System.out.print("年: ");
        endYear = scanner.nextInt();
        outputEndYear = endYear;
       
        System.out.print("月: ");
        endMonth = scanner.nextInt();
        outputEndMonth = endMonth;
       
        System.out.print("日: ");
        endDay = scanner.nextInt();   
        outputEndDay = endDay;
    }
   
    private void countDayNum() {
       
        if(this.startYear > this.endYear) {//起始年大于结束年,全部信息交换
            this.tempYear = this.endYear;
            this.endYear = this.startYear;
            this.startYear = this.tempYear;
           
            this.tempMonth = this.endMonth;
            this.endMonth = this.startMonth;
            this.startMonth = this.tempMonth;
           
            this.tempDay = this.endDay;
            this.endDay = this.startDay;
            this.startDay = this.tempDay;       
        }
      
        if(this.endYear == this.startYear){//若年相等
           
            if(this.endMonth < this.startMonth) {//起始月大于结束月,信息转换
                this.tempMonth = this.endMonth;
                this.endMonth = this.startMonth;
                this.startMonth = this.tempMonth;
               
                this.tempDay = this.endDay;
                this.endDay = this.startDay;
                this.startDay = this.tempDay;   
            }
           
            if(this.endMonth == this.startMonth){//若月相等
                this.dayNum = Math.abs(this.endDay - this.startDay);//结果
            }else {//年相等,月正确
                /*先算出两个月份中间的月份有多少天*/
                for(int i = this.startMonth + 1; i <= this.endMonth - 1; i++) {
                    this.dayNum += monthDayNum(i, this.startYear);
                }
               
                /*判断起始月的天数*/
                int startMonthDayNum = monthDayNum(this.startMonth, this.startYear);
                //加上起始月还剩下的天数
                this.dayNum += startMonthDayNum - this.startDay + 1;
                //加上结束月已经过了的天数
                this.dayNum += this.endDay - 1;
            }   
        }else {//年正确
            /*算出年之间的天数*/
            for(int i = this.startYear + 1; i <= this.endYear - 1;  i++) {
                if(isLeapyear(i)) {//如果是闰年
                    this.dayNum += 366;
                }else{
                    this.dayNum += 365;
                }
            }
           
            /*起始月距离该年结束的天数*/
            for(int i = this.startMonth + 1; i <= 12; i++) {
                this.dayNum += monthDayNum(i, this.startYear);
            }
           
            //判断起始月的天数
            int startMonthDayNum = monthDayNum(this.startMonth, this.startYear);
            //加上起始月还剩下的天数
            this.dayNum += startMonthDayNum - this.startDay + 1;
           
            /*结束月距离年初的天数*/
            for(int i = 1; i <= this.endMonth - 1; i++) {
                this.dayNum += monthDayNum(i, this.endYear);
            }
           
            //加上结束月已经过了的天数
            this.dayNum += this.endDay - 1;
        }
       
        System.out.println(this.outputStartYear + "年" + this.outputStartMonth + "月"
                           + this.outputStartDay + "日\n距离\n" + this.outputEndYear + "年"
                           + this.outputEndMonth + "月" + this.outputEndDay + "日\n有\n"
                           + this.dayNum + "天");
    }
   
    /**
     * 计算是否是闰年
     * @param year
     * @return
     */
    private boolean isLeapyear(int year)
    {
      if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
        return true;
      }
      return false;
    }
   
    /**
     * 计算月份间的天数
     */
    private int monthDayNum(int tempMonth, int tempYear) {
        int dayNum = 0;
       
        switch (tempMonth){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12: dayNum += 31;
                  break;
        case 4:
        case 6:
        case 9:
        case 11: dayNum += 30;
                  break;
        case 2: if(isLeapyear(tempYear)){
                     dayNum += 29;
                 }else{
                     dayNum += 28;
                 }
                 break;
        default: break;
        }
   
        return dayNum;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        TestDayNum tdn = new TestDayNum();
        tdn.countDayNum();
    }
}
分享到:
评论

相关推荐

    Lua实现两个日期相减得出天数(datadiff)

    实现两个数值型的日期相减得出天数的函数。

    java两个日期相减得到的天数、毫秒数;获取两个日期中的最大日期;获取两个日期中的最小日期

    java 两个日期相减得到的天数、毫秒数;获取两个日期中的最大日期;获取两个日期中的最小日期。

    java实现两个日期相减得到中间的年份和月份日期改进版

    上个实例改进 java实现两个日期相减得到中间的年份和月份日期

    WinForm中界面日期相减(DateTimePicker控件)

    在实际应用中,你可能需要扩展这个基础功能,例如使用日期库(如Noda Time)来处理更复杂的日期和时间计算,或者添加自定义的业务逻辑,比如计算两个日期之间的工作日数量。 总结来说,WinForm中的DateTimePicker...

    C#计算两个日期间隔的年月日,精确到天,无视闰年等

    C#计算两个日期间隔的年月日,精确到天,无视闰年等。 /// /// 计算两个日期间隔的年月日 /// /// &lt;param name="MinDate"&gt;&lt;/param&gt; /// &lt;param name="MaxDate"&gt;&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; public ...

    JS 两日期相减,获得天数的小例子(兼容IE,FF)

    在本篇文章中,作者分享了一个使用JavaScript实现获取两个日期相减得到天数的小例子,并且确保了兼容性在IE和Firefox(FF)浏览器上。这个例子对于前端开发者来说十分实用,特别是在需要处理日期计算和表单验证的...

    android日期相减

    例如,如果你有两个`Date`对象`date1`和`date2`,你可以通过`date1.getTime() - date2.getTime()`得到它们之间的毫秒差。为了将这个差异转换为天数、小时数等,你需要除以相应的转换因子。 2. **数字日历**: 创建...

    计算两个日期相隔天数并减去节假日

    计算两个日期相隔天数并减去节假日,这个可以使用在各种需要通知的场景以及工作日提醒等

    C# 日期相减实例

    总结起来,C#中进行日期相减是通过`DateTime`对象和`-`运算符完成的,结果是一个`TimeSpan`对象,表示两个日期之间的差值。`DataTimer`控件可以帮助我们在应用程序中动态显示这种差异,尽管它不是直接用于计算日期...

    javaScript和java中日期相减得出天数方案

    - `add`函数调用`formatDate`函数获取两个日期的`Date`对象,并使用`Date.parse`函数计算出这两个日期对应的毫秒数。 - 最后,通过计算毫秒数之差并除以一天的毫秒数来得到天数。 #### Java中的日期相减方案 在...

    编写一个友元函数,求两个日期之间相差的天数;

    在本题中,我们需要设计一个友元函数来计算两个日期之间的天数差异。下面将详细阐述如何实现这个功能。 首先,我们定义一个名为`Date`的类,它包含表示日期的年、月、日的数据成员。这些数据成员通常设置为私有,以...

    C#日期间隔计算,能计算年,月,天

    这个标题“C#日期间隔计算,能计算年,月,天”指的是如何在C#中计算两个日期之间的差值,包括年、月和天数。描述进一步提到了能够处理DateTime类型的变量,并且可以计算出两个日期之间相差的具体年、月和天数。 ...

    C#实现两个时间相减的方法

    例如,`t3.TotalDays`返回365,表示两个日期之间相隔的天数;`t3.TotalHours`则返回8760,表示总共有8760个小时。 这个简单的示例展示了在C#中如何处理时间相减的基本操作,以及如何获取时间间隔的不同表示形式。在...

    mybatis中操作日期实例分析

    在MyBatis这个强大的持久层框架中,处理日期时间是常见的操作之一。本文将通过实例分析,探讨在MyBatis中如何有效地操作日期,包括插入、查询和更新等操作。我们将从以下几个方面来深入理解这一主题: 1. **日期...

    界面日期相减DateTimePicker

    标题中的“界面日期相减DateTimePicker”指的是在C#编程环境下,使用DateTimePicker控件进行日期选择,并实现两个日期之间的差值计算。DateTimePicker是Windows Forms应用程序中常见的一种控件,用于用户输入或选择...

    oracle日期时间判断函数

    针对标题"oracle日期时间判断函数"和描述中提到的内容,我们可以深入探讨两个关键的函数,它们主要用于判断字符串是否可以转换为合法的日期时间格式。 1. TO_DATE函数: TO_DATE是Oracle中用于将字符串转换为日期...

    oracle日期相减.pdf

    Oracle 日期相减是指计算两个日期之间的时间差异,包括月份、天数、小时、分钟、秒、毫秒等。下面将详细介绍 Oracle 中日期相减的方法。 一、计算月份差 MONTHS_BETWEEN 函数是 Oracle 中计算两个日期之间的月份...

    GBase数据库中的日期时间类型详解 1.doc

    INTERVAL常用于计算两个DATETIME值之间的差异,提供了一种衡量时间间隔的方式。 在实际应用中,根据需求选择合适的日期/时间类型至关重要。DATE适用于只需要日期信息的场景,DATETIME适合需要精确到某个时间点的...

    西门子博途1200 时间相减

    西门子博途1200 时间相减是指在 Siemens STEP 7 (TIA Portal) 中,对 CPU 模块的日期和时间变量进行输入、读取和编辑。为了实现这一功能,需要使用特定的数据类型和指令。 在 S7-300/400 中,需要使用数据类型 “DT...

    Delphi 计算两个日期之间的时间差(天数).rar

    在Delphi编程环境中,计算两个日期之间的时间差是一项常见的任务,尤其对于开发涉及日期和时间处理的应用程序来说。本示例源码专为Delphi初学者设计,它演示了如何在Delphi 7中计算两个日期之间的天数差异。下面我们...

Global site tag (gtag.js) - Google Analytics