• 不用既存函数,计算任意两个日期的天数


    package com.zrp.apartday;

    /**
     * 这个类主要的功能是计算任意两个日期的相隔天数,主要算法思想是
     * 1.计算开始日期到该年结束日期的相隔天数 如:开始日期为:2009-07-12 则求出到该日期到 2009-12-31日的相隔天数
     * 2.计算结束日期到改年开始日期的相隔天数 如:结束日期为: 2025-08-05 则求出该日期到 2025-01-01
     * 3.计算出2010年到2024年的所有的天数
     * 4.把以上所有的天数相加
     * @author Administrator
     *
     */
    public class DateApartDays {
     /**
      * This is constructed function
      */
        public DateApartDays(){};
     
      /**
       * 比较两个日期大小,写成静态方法
       * @param startDate,endDate
       * @return boolean
       */
        public boolean DateCompare(String startDate,String endDate){
      boolean begBinggerEnd = Integer.valueOf(startDate)<=Integer.valueOf(endDate);
      try
      {
         assert begBinggerEnd:"开始日期必须要大于结束日期!";
      }catch(AssertionError err)
      {
       System.out.println(err.getMessage());
      }
      return !begBinggerEnd;
     }
       
        /**
         * 计算两个日期相隔的天数
         * @param startDate, endDate
         * @return The apart days 
         */
        public int SumDays(String startDate,String endDate ){
      int sumDays=0;
            int tempBeginYear =  getYear(startDate);
            int tempEndYear =  getYear(endDate);        
          if(DateCompare(startDate,endDate))
          {     
           return -1;
          }
          else if(tempBeginYear==tempEndYear)
          {             
            sumDays = pastDays(endDate)-pastDays(startDate);                 
           }
           else
           {        
            for(int i = getYear(startDate)+1;i<getYear(endDate);i++)
            {
                  if(IsLeapYearFromYear(i))
                   sumDays+=366;
                  else
                   sumDays+=365;                       
            }
            sumDays+=SurplusDay(startDate);
            sumDays+=pastDays(endDate);        
           }                  
         return sumDays;    
     }
      /**
       * 从日期中获取年
       * @param date
       * @return year
       */
     private int getYear(String  date)
     {
       return Integer.valueOf(date)/10000;
     }
     /**
      * 从日期中获取月
      * @param date
      * @return  month
      */
     private Integer getMonth(String  date)
     {
        return Integer.valueOf(date)%10000/100;
     }  
     /**
      * 从日期中获取日
      * @param date
      * @return days
      */
     private Integer getDay(String date){
        return  Integer.valueOf(date)%10000%100;
     }
     
     /**
      * 判断某个日期是否是闰年
      * @param Date
      * @return boolean
      */
     private boolean isLeapYear(String Date){
      if((getYear(Date)%4==0&&getYear(Date)%100!=0)||getYear(Date)%400==0){  
       return true;
       }
      else{
       return false;
      } 
     }
     /**
      * 判断某年是否是闰年
      * @param Date
      * @return boolean
      */
     private boolean IsLeapYearFromYear(int year){
      if((year%4==0&&year%100!=0)||year%400==0){
       return true;
      }
      else{
       return false;
      }   
     }  
     /**
      * 计算某日期到该年开始的相隔天数
      * @param Date
      * @return 相隔天数
      */
     private int pastDays(String Date){
      int tempSumDays=0;
      if(isLeapYear(Date)){   
       for(int i=1;i<getMonth(Date);i++){
        switch(i){
         case 1:
             tempSumDays+=31;
             break;
         case 2:
          tempSumDays+=29;
          break;
         case 3:
          tempSumDays+=31;
          break;
         case 4:
          tempSumDays+=30;
          break;
         case 5:
          tempSumDays+=31;
          break;
         case 6:
          tempSumDays+=30;
          break;
         case 7:
          tempSumDays+=31;
          break;
         case 8:
          tempSumDays+=31;
          break;
         case 9:
          tempSumDays+=30;
          break;
         case 10:
          tempSumDays+=31;
          break;
         case 11:
          tempSumDays+=30;
          break;
        }
       }
       tempSumDays += getDay(Date);
       return tempSumDays;
      }
      else{
       for(int i=1;i<getMonth(Date);i++){   
        switch(i){
        case 1:
            tempSumDays+=31;
            break;
        case 2:
         tempSumDays+=28;
         break;
        case 3:
         tempSumDays+=31;
         break;
        case 4:
         tempSumDays+=30;
         break;
        case 5:
         tempSumDays+=31;
         break;
        case 6:
         tempSumDays+=30;
         break;
        case 7:
         tempSumDays+=31;
         break;
        case 8:
         tempSumDays+=31;
         break;
        case 9:
         tempSumDays+=30;
         break;
        case 10:
         tempSumDays+=31;
         break;
        case 11:
         tempSumDays+=30;
         break;     
        }
       }
       tempSumDays += getDay(Date);
       return tempSumDays;
      }
     
     }
     /**
      * 计算某日期到该年的结束的相隔天数
      * @param Date
      * @return 相隔天数
      */
     private int SurplusDay(String Date){
     
        if(isLeapYear(Date)){
         return 366-pastDays(Date);
        }
        else{
         return 365-pastDays(Date);
        }
     }
     
    }

  • 相关阅读:
    TcxComboBoxProperties下拉框填充
    Delphi用QJSON解析JSON格式的数据 【转】
    Delphi的idhttp报IOHandler value is not valid错误的原因[转]
    RelayCommand
    ViewModelBase && ObservableObject
    MvvmLight ToolKit 教程
    WPF中的数据验证
    MvvmLight ToolKit .Net4.5版本 CanExecute不能刷新界面bug
    微软虚拟学院MVA 字幕获取方法
    WPF Binding INotifyPropertyChanged 多线程 深入理解
  • 原文地址:https://www.cnblogs.com/zrp201008/p/1876755.html
Copyright © 2020-2023  润新知