udtdatetime.java

来自「一个简单的visio程序。」· Java 代码 · 共 838 行 · 第 1/2 页

JAVA
838
字号
package HPCore.stdfunc;
import  HPCore.Exception.*;

import   java.util.*;
public class UdtDatetime
{

   public UdtDatetime(){ }

   public GGRESULT dtcommon(int[]  ddtt)
   {
       GGRESULT dt = new GGRESULT();
       dt.flagd	= 0;                /* 1 is date format */
       dt.flagt	= 0;                /* 1 is time format */
       dt.valued = 0;
       dt.valuet = 0;             /* initial dt  as default*/

       int DateorTime = 1;
       char itemch=0;

       if( ddtt[0]!=0 || ddtt[1]!=0 || ddtt[2]!=0 )
       {
       dt.flagd = 1;
       int[]  date = new int[3];
       date[0] = ddtt[0];
       date[1] = ddtt[1];
       date[2] = ddtt[2];
       dt.valued = funcc(1, date);
       }

       if( ddtt[3]!=0 || ddtt[4]!=0 || ddtt[5]!=0 )
       {
           int[] time = new int[3];
           time[0] = ddtt[3];
           time[1] = ddtt[4];
           time[2] = ddtt[5];
           dt.valuet = funcc(0,time);
           dt.flagt = 1;
       }
       return dt;
   }  /* end of the dtcommon */


   private double funcc(int flag,int[]  date)
   {
    double  res=0;
    if(flag!=0)
      res = isda(date);
    else
      res = isti(date);

    return  res;
    }

   public double isda(int[] number)
   {
        // number[] 0 is month,1 is day, 2 is year
        double dd=0;
        int day=0;
        int  yer;
        int i;
        if (number[2] >= 1900)
        {
         for (yer = 1900; yer < number[2]; yer++)
            day += (yer % 4 == 0 && yer % 100 != 0 ||
                    yer % 400 == 0) ? 366 : 365;

            day += 1 + number[1];
            for (i = 1; i < number[0]; i++)
            day += (i == 2) ? ((number[2] % 4 == 0 && number[2] % 100 != 0 ||
                                number[2] % 400 == 0) ? 29 : 28)
                                : ((i <= 7) ? 30 + i % 2 : 31 - i % 2);


         }

         else
         {
         for (yer = 1899; yer > number[2]; yer--)
            day -= (yer % 4 == 0 && yer % 100 != 0 ||
                    yer % 400 == 0) ? 366 : 365;

         day += 1 + number[1] - ((number[0] == 2) ? ((number[2] % 4 == 0 &&
                                                      number[2] % 100 !=
                                                        0 ||
                                                         number[2] % 400 ==
                                                         0) ?
                                                        29 : 28) :
                                    (number[0] <= 7) ?
                                    30 + number[0] % 2 : 31 - number[0] % 2);
         for (i = number[0] + 1; i < 13; i++)
            day -= (i == 2) ? ((number[2] % 4 == 0 && number[2] % 100 != 0 ||
                                number[2] % 400 == 0) ? 29 : 28)
            : ((i <= 7) ? 30 + i % 2 : 31 - i % 2);

         }
      //if( day<0 )
      //  dd = day-1;
      //else
        dd = day;
      return dd;
   }

   public double isti(int[]  ti/*time*/)
   {
        double tt=0;
        tt = (double)ti[0]/24 +  (double)(ti[1]) / ( 24*60 ) + (double)(ti[2]) / ( 24*60*60);
        return tt;
   }
   /*the datetime format are:
        mm/dd/yy ( time) , dd/mm/yy( time),
        dd/mm( time), mm/dd(time), mm/yy( time)
        the last the datetime format is "mm/dd/yy hh:mi:se"
        from 12/30/1899 0:0:0am to 12/30/9999 0:0:0
   */
   public static int[] DtFormat(String  date)
   {
/*
    char        stdard[] = {'/', ',','-', ' ' ,'.', ':'};
    char        std[]={'/',',','-'};   // only date format
*/
    String[]    dt_str = {"","","","" };
  
    int[]       dt_Arr = new int[6];  //0 is month , 1 is  day, 2 is year
    int         i=0;
                                         //3 is hour, 4 is minute, 5 is second.
    String months[] =
      {
      "january", "february", "march", "april", "may", "june", "july", "august",
      "september", "october", "november", "december"
      };
    
    String      s = date.trim().toLowerCase();
    dt_str = dtpart(s);

    if( dt_str==null ) 
        return null;
    else if( dt_str[0].equals("") && dt_str[1].equals("") && dt_str[2].equals("" ) && dt_str[3].equals("" ) )
        return null;

    Date  today = new Date();
    HCDateTimeStruct  tm = new HCDateTimeStruct();

    // redjust  the dt_str[], 0 is month, 1 is day, 2 is year, 3 is time
    if((dt_str[0].equals("") && !dt_str[1].equals("")) || (dt_str[0].equals("") && !dt_str[2].equals("") ))
        return null;
    else if( dt_str[0].compareTo("")==0 )
    {
        dt_Arr[0] = 0;  //12
        dt_Arr[1] = 0;  //30
        dt_Arr[2] = 0;  //1899
    }
    else if( dt_str[1].compareTo("")==0 )
        return null;
    else if( dt_str[2].compareTo("")==0 )
    {
        //int yea = calendar.get(Calendar.YEAR);
        int yea = today.getYear();

        int str0_int=0, str1_int=0;
        boolean   s_str0=false , s_str1=false;

        try{
            str0_int = Integer.parseInt(dt_str[0]);
        } catch( Exception err)
            {
            if( dt_str[0].length()<3 )
                return null;
            for( i=0; i<12 && months[i].indexOf( dt_str[0])==-1; i++)
                ;
            if(i!=12)
            {
                str0_int = i+1;
                s_str0 = true;
            }
            else
                return null;
            }

        try{
            str1_int = Integer.parseInt(dt_str[1]);
        } catch( Exception err)
            {
            if( dt_str[1].length()<3 || s_str0)
                return null;
            for( i=0; i<12 && months[i].indexOf( dt_str[1])==-1; i++)
                ;
            if(i!=12)
            {
                str1_int = i+1;
                s_str1 = true;
            }
            else
                return null;
            }

        if( s_str0 ) // the format is mm/yy or mm/dd
        {
            dt_Arr[0] = str0_int;
            if( str1_int<=tm.Month_Day( yea, str0_int ))
            {
                dt_Arr[1] = str1_int;
                dt_Arr[2] = yea;
            }
            else
            {
                dt_Arr[1] =1;
                dt_Arr[2] = str1_int +
                            ( str1_int<100 ? (str1_int<30 ? 2000:1900) : 0);
            }
        }  //end of s_str0=true
        if( s_str1 ) // the format is yy/mm or dd/mm
        {
            dt_Arr[0] = str1_int;
            if( str0_int<=tm.Month_Day( yea, str1_int ))
            {
                dt_Arr[1] = str0_int;
                dt_Arr[2] = yea;
            }
            else
            {
                dt_Arr[1] =1;
                dt_Arr[2] = str0_int +
                            ( str0_int<100 ? (str0_int<30 ? 2000:1900) : 0);
            }
        }   //end of s_str1=true
        else if(str0_int>13 )  // is yy/mm
        {
            dt_Arr[1] = 1;
            dt_Arr[2] = str0_int +
                        (str0_int<100 ? ( str0_int<30 ? 2000:1900):0 ) ;
            if( str1_int>12 )
                return null;
            dt_Arr[0] = str1_int;
        }
        else  //  is mm/yy or mm/dd
        {
            dt_Arr[0] = str0_int;
            if( str1_int<= tm.Month_Day( yea,  str0_int) )
            {
                dt_Arr[1] = str1_int;
                dt_Arr[2] = yea;
            }
            else
            {
                dt_Arr[1] = 1;
                dt_Arr[2] = str1_int + (str1_int>100 ? 0
                                       :( str1_int>30 ? 1900 : 2000) );
            }
        }
    }   //end of dt_str[2]=""
    else if( dt_str[0].compareTo("")!=0  &&
             dt_str[1].compareTo("")!=0  &&
             dt_str[2].compareTo("")!=0   )
    {
        boolean  s_str0=false, s_str1=false, s_str2=false;
        int      str0_int=0, str1_int=0, str2_int=0;

        try{
            str0_int = Integer.parseInt( dt_str[0] );
        } catch( Exception  err)
            {
            if( dt_str[0].length()<3 )
                return null;
            for( i=0; i<12 && months[i].indexOf( dt_str[0])==-1; i++)
                ;
            if(i!=12)
            {
                str0_int = i+1;
                s_str0 = true;
            }
            else
                return null;
            }

        try{
            str1_int = Integer.parseInt( dt_str[1] );
        } catch( Exception  err)
            {
            if( s_str0 || dt_str[1].length()<3 )
                return null;
            for( i=0; i<12 && months[i].indexOf( dt_str[1])==-1; i++)
                ;
            if(i!=12)
            {
                str1_int = i+1;
                s_str1 = true;
            }
            else
                return null;
            }

        try{
            str2_int = Integer.parseInt( dt_str[2] );
        } catch( Exception  err)
            {
            if( s_str0 || s_str1 || dt_str[2].length()<3 )
                return null;
            for( i=0; i<12 && months[i].indexOf( dt_str[2])==-1; i++)
                ;
            if(i!=12)
            {
                str2_int = i+1;
                s_str2 = true;
            }
            else
                return null;
            }

        if( s_str0 )
        {
            dt_Arr[0] = str0_int ;  // is month
            int  tmpyy=0, tmpdd=0 ,tmpint;

            if( str1_int>31 )  // str1_int is year
            {
                str1_int += str1_int<100 ? 1900:0 ;
                if( str2_int > tm.Month_Day( str1_int, str0_int ) )
                    return null;
                dt_Arr[1] = str2_int;
                dt_Arr[2] = str1_int;
            }
            else if( str1_int <= tm.Month_Day( tmpyy = str2_int + ( tmpint=(str2_int>100 ? 0:(str2_int>29 ? 1900:2000) ) ) , str0_int ) )
            {
                dt_Arr[1] = str1_int;
                dt_Arr[2] = tmpyy;
            }
            else if(str2_int <= tm.Month_Day(tmpyy = str1_int + (tmpint=(str1_int>100 ? 0:(str1_int>29 ? 1900:2000) ) ), str0_int) )
            {
                dt_Arr[1] = str2_int;
                dt_Arr[2] = tmpyy;
            }
            else
            {
                return null;
            }
        } // end of s_str0==true
        else if( s_str1 )
        {
            dt_Arr[0] = str1_int;
            int  tmpyy=0, tmpdd=0 , tmpint;
            if( str0_int>31 )  // str0_int is year
            {
                str0_int += str0_int<100 ? 1900:0 ;
                if( str2_int > tm.Month_Day( str0_int, str1_int ) )
                    return null;
                dt_Arr[1] = str2_int;
                dt_Arr[2] = str0_int;
            }
            else if( str0_int<= tm.Month_Day( tmpyy = str2_int + ( tmpint=(str2_int>100 ? 0:(str2_int>29 ? 1900:2000) ) ) , str1_int ) )
            {
                dt_Arr[1] = str0_int;
                dt_Arr[2] = tmpyy;
            }
            else if(str2_int <= tm.Month_Day( tmpdd =str0_int + (tmpint = ( str0_int>100 ? 0 : (str0_int>30 ? 1900:2000) ) ),str1_int ) )
            {
                dt_Arr[1] = str2_int;
                dt_Arr[2] = tmpdd;
            }
            else
                return null;
        } //end of s_str1=true
        else if( s_str2 )
        {
            dt_Arr[0] = str2_int;
            int  tmpyy=0, tmpdd=0, tmpint;
            if( str0_int>31 )  // str0_int is year
            {
                str0_int += str0_int<100 ? 1900:0 ;
                if( str1_int > tm.Month_Day( str1_int, str2_int ) )
                    return null;
                dt_Arr[1] = str1_int;
                dt_Arr[2] = str0_int;
            }
            else if(str0_int <= tm.Month_Day( tmpyy = str1_int + (tmpint=(str1_int>100 ? 0 : (str1_int>29 ? 1900:2000 )) ), str2_int ) )
            {
                dt_Arr[1] = str0_int;
                dt_Arr[2] = tmpyy;
            }
            else if(str1_int <= tm.Month_Day( tmpdd =str0_int + (tmpint=( str0_int>100 ? 0 :(str0_int>30 ? 1900:2000)) ),str2_int ) )
            {
                dt_Arr[1] = str1_int;
                dt_Arr[2] = tmpdd;
            }
            else
                return null;
        } //end of s_str2=true
        else if( str0_int>12 && !s_str0 && !s_str1 && !s_str2)
                // the format is yy/mm/dd or dd/mm/yy this time
        {
            // judge month
            if(str1_int>12 )
                return null ; //  is illegal month
            else
                dt_Arr[0] = str1_int; //month

            int  tmpyy=0, tmpdd=0 , tmpint;
            if( str0_int>31 )  // str0_int is year
            {
                str0_int += str0_int<100 ? 1900:0 ;
                if( str2_int> tm.Month_Day( str0_int, str1_int ) )
                    return null;
                dt_Arr[1] = str2_int;
                dt_Arr[2] = str0_int;
            }
            else if( str2_int <= tm.Month_Day( tmpyy =str0_int + (tmpint=str0_int<100 ? (str0_int>29 ? 1900:2000):0 ),str1_int ) )
            {
                dt_Arr[1] = str2_int;
                dt_Arr[2] = tmpyy;
            }
            else if(str0_int <= tm.Month_Day( tmpdd =str2_int + (tmpint=(str2_int<100 ? (str2_int>30 ? 1900:2000):0 )) ,str1_int ) )
            {
                dt_Arr[1] = str0_int;
                dt_Arr[2] = tmpdd;
            }
            else
                return null;
        }
        else if( str0_int==0 || str1_int==0 || str2_int==0)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?