udtdatetime.java

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

JAVA
838
字号
        { // maybe year is 2000
            if( str0_int==0 )
            {
                dt_Arr[2] = 2000;
                if( str1_int<=0 || str1_int>12 ) //is not month
                    return null;
                dt_Arr[0] = str1_int;
                if( str2_int > tm.Month_Day(dt_Arr[2], dt_Arr[0] ) )
                    return null;
                dt_Arr[1] = str2_int;
            }
            else
                return null;
        }
        else   // the format is mm/dd/yy
        {
            dt_Arr[2] = str2_int +
                        (str2_int<100 ? (str2_int<30 ? 2000 : 1900) : 0 );
            dt_Arr[0] = str0_int ;

            if( str1_int > tm.Month_Day(dt_Arr[2], dt_Arr[0] ) )
                return  null;
            dt_Arr[1] = str1_int;
        }
    }

    try
    {
    if( dt_str[3].compareTo("")!=0 )
    {
        dt_str[3] = dt_str[3].replace('.', ':');
        int col = dt_str[3].indexOf(':');
        if( col==-1 )
        {
            int     amorpm ;
            boolean ispm=false;

            amorpm = dt_str[3].lastIndexOf("am");
            if( amorpm==-1 )
            {
                ispm = true;
                amorpm = dt_str[3].lastIndexOf("pm");
            }
            if( amorpm==dt_str[3].length()-2 )
            {
                dt_Arr[3]=Integer.parseInt( dt_str[3].substring(0,amorpm).trim() );
                if( dt_Arr[3] > 23 )
                    return null;

                if( ispm==true && dt_Arr[3]<12 )
                    dt_Arr[3] = dt_Arr[3] +12;  // redjust  the hour
            }
            else
                return null;
        }
        else
        {
            dt_Arr[3] = Integer.parseInt( dt_str[3].substring(0,col).trim() ); //is hour
            if( dt_Arr[3] > 23 )
                return null;

            dt_str[3] = dt_str[3].substring(col+1 ).trim();
            if( dt_str[3].compareTo("")==0 ) // only hour
                return null;

            col = dt_str[3].indexOf(':');
            if( col!=-1 )
            {
                dt_Arr[4] = Integer.parseInt( dt_str[3].substring(0,col).trim() );
                if( dt_Arr[4]>59 )
                    return null;
                dt_str[3] = dt_str[3].substring(col+1).trim();
                if( dt_str[3].indexOf(':')!=-1 )
                    return null;

                int dot = dt_str[3].lastIndexOf("am");

                if( dot ==-1 )  // if more than one string the next is error
                {
                    dot = dt_str[3].lastIndexOf("pm");
                    if( dot==-1 )
                    {
                        dt_Arr[5] = Integer.parseInt( dt_str[3]);
                        if( dt_Arr[5]>59 )
                        return null;
                    }
                    else
                    {
                        dt_str[3] = dt_str[3].substring(0, dot).trim();
                        dt_Arr[5] = Integer.parseInt( dt_str[3] ); // get second
                        if( dt_Arr[5]>59 )
                            return null;
                        if( dt_Arr[3]<12 )
                            dt_Arr[3] = dt_Arr[3] +12;  // redjust  the hour
                    }
                } //end of am=-1
                else
                {
                    dt_str[3] = dt_str[3].substring(0, dot).trim();
                    dt_Arr[5] = Integer.parseInt( dt_str[3] );
                    if( dt_Arr[5]>59 )
                        return null;
                }
            } // only hour and minute
            else
            {
                int dot = dt_str[3].lastIndexOf("am");
                if( dot ==-1 )  // if more than one string the next is error
                {
                    dot = dt_str[3].lastIndexOf("pm");
                    if( dot==-1 )
                    {
                        dt_Arr[4] = Integer.parseInt( dt_str[3].trim());
                        if( dt_Arr[4]>59 )
                        return null;
                    }
                    else
                    {
                        dt_str[3] = dt_str[3].substring(0, dot).trim();
                        dt_Arr[4] = Integer.parseInt( dt_str[3] ); // get minute
                        if( dt_Arr[4]>59 )
                            return null;
                        if( dt_Arr[3]<12 )
                            dt_Arr[3] = dt_Arr[3] +12;  // redjust  the hour
                    }
                } //end of am=-1
                else
                {
                    dt_str[3] = dt_str[3].substring(0, dot).trim();
                    dt_Arr[4] = Integer.parseInt( dt_str[3] );
                    if( dt_Arr[4]>59 )
                        return null;
                }
            }
        }
    }
    }catch ( Exception err)
        {
            return null;
        }

    return dt_Arr;
   }

   
   public static String[] dtpart(String s)
   {
    char        stdard[] = {'/', ',','-', ' ' ,'.', ':'};
    char        std[]={'/',',','-'};   // only date format

    String[]    dt_str = {"","","","" };
    String      date="",istime="",isdate="";
    int         label=0, temp=0,i=0,j=0,k=0,sd=0 ,lab=0;
    char        ch='N';
    
    s = s.trim();
    try
    {
    while( lab<s.length() )
    {
        for( j=0;(j<6) && (s.charAt(lab)!=stdard[j]) ;j++)
            ;

 	    if( j!=6 )
 	    {
 	        ch = stdard[j];
 	        if( ch==' ')
 	        {
 	            while( s.charAt(lab)==' ' && label<=2 )
 	            lab++;

 	            for(i=lab; i<s.length() && label<=2 ; i++)
 	            {
 	                if(     s.charAt(i)=='.'                            ||
 	                        s.charAt(i)==':'                            ||
 	                        (s.charAt(i)=='a' && s.indexOf("am")==i )   ||
 	                        (s.charAt(i)=='a' && s.indexOf("am")==i )   )
 	                {
	                    i--;
	                    while(s.charAt(i)==' ' )
    	                    i--;
    	                dt_str[3] = s.substring(i);
 	                    break;
                    }

 	                for(k=0; (k<3) && ( s.charAt(i)!=std[k] );k++)
 	                ;
 	                if(k!=3 && s.charAt(i)==std[k] )
 	                {
 	                    i++;
 	                    while(i<s.length() && s.charAt(i)==' ' )
 	                        i++;
 	                    break;
 	                }
 	                else if(k==3 && s.charAt(--i)==' ' )
 	                {
 	                    i++;
 	                    break;
 	                }
 	            }
                lab = i;

                if( dt_str[3].compareTo("")!=0 )
                {
                    label = 3;
                    break;
                }

                if(lab==s.length() )
                {
                    lab--;
 	                dt_str[label] = label==0 ? s.trim()
 	                                         : s.substring(temp).trim();
                    // rid the first char or the end char among the std[]
                    for( sd=0; sd<3 && dt_str[label].charAt(dt_str[label].length()-1 )!=std[sd]; sd++)
                    ;
                    if( sd!=3)
                        dt_str[label] = dt_str[label].substring(0, (dt_str[label].length()-1) ).trim();
                    else
                    {
                        for( sd=0; sd<3 && dt_str[label].charAt(0)!=std[sd]; sd++)
                        ;
                        if( sd!=3)
                            dt_str[label] = dt_str[label].substring(1).trim();
                    }
                    temp = lab;
                    label++;
                    break;
                }
                else
 	            {
 	                dt_str[label] = label==0 ? s.substring(0, lab).trim()
 	                                         : s.substring(temp,lab).trim();
                }

                // rid the first char or the end char among the std[]
                for( sd=0; sd<3 && dt_str[label].charAt(dt_str[label].length()-1 )!=std[sd]; sd++)
                ;
                if( sd!=3)
                    dt_str[label] = dt_str[label].substring(0, (dt_str[label].length()-1) ).trim();
                else
                {
                    for( sd=0; sd<3 && dt_str[label].charAt(0)!=std[sd]; sd++)
                    ;
                    if( sd!=3)
                        dt_str[label] = dt_str[label].substring(1).trim();
                }

                temp = lab;
                label++;
                if( label==2)
                    lab++;
                else if(label==3 )
                {
                    dt_str[label] = s.substring(temp);
                    break;
                }
 	            continue;
            }
            else if( ch=='.' || ch==':')
            {
                int a=lab-1;
                boolean  isspace=false,isdigit=false;
                while( --a>=0 )
                {
                    if(s.charAt(a)=='/' || s.charAt(a)=='-' || s.charAt(a)==',' )
                    {
                        if( isdigit==false || isspace==false)
                            return null;
                    }
                    if(s.charAt(a)==' ' )
                        isspace = true;
                    else if( s.charAt(a)>='0' && s.charAt(a)<='9' )    
                        isdigit = true;
                }
                
                label = 3;
                dt_str[3] = s.substring(temp);
                break;
            }
            else if( label==2 && ch!=' ')
            {
                return null;
            }
            else
            {
                lab++;
                while(lab<s.length() && s.charAt(lab)==' ' )
                    lab++;

 	            dt_str[label] = label==0 ? s.substring(0, lab).trim()
 	                                     : s.substring(temp,lab).trim();

                // rid the first char or the end char among the std[]
                //int  sd;
                for( sd=0; sd<3 && dt_str[label].charAt(dt_str[label].length()-1 )!=std[sd]; sd++)
                ;
                if( sd!=3)
                {
                    dt_str[label] = dt_str[label].substring(0, (dt_str[label].length()-1) ).trim();
                }
                else
                {
                    for( sd=0; sd<3 && dt_str[label].charAt(0)!=std[sd]; sd++)
                    ;
                    if( sd!=3)
                        dt_str[label] = dt_str[label].substring(1).trim();
                }

                label++;
                temp = lab;
            }

            if( label==3 )
            {
                dt_str[label] = s.substring(lab);
                break;
            }
        }

	   lab++;
	}

    if( label==0 && s.indexOf("am")!=-1 || s.indexOf("pm")!=-1 )
    {
        label = 3;
        dt_str[3] = s.substring(temp);
    }

	if( label<3 && lab!=temp )
    {
        dt_str[label] = s.substring(temp);
        for( sd=0; sd<3 && dt_str[label].charAt(0)!=std[sd]; sd++)
        ;
        if( sd!=3)
            dt_str[label] = dt_str[label].substring(1).trim();
        else
            dt_str[label] = dt_str[label].trim();
	}

    if( dt_str[3].compareTo("")!=0 )
    {
       
        for( k=0; k<dt_str[3].length(); k++)
        {
            for( sd=0; sd<3 && dt_str[label].charAt(0)!=std[sd]; sd++)
            ;
            if( sd!=3 )
            return null;
        }
        
        int am_pm = dt_str[3].lastIndexOf("am");
        
        if( am_pm==-1 )
            am_pm = dt_str[3].lastIndexOf("pm");
        if( am_pm!=-1 )
        {
            istime = dt_str[3].substring(0,am_pm );
            if( istime.length() + 2 != dt_str[3].length() )
            {
                istime =" " + dt_str[3].substring(0,am_pm+2 );
                isdate = dt_str[3].substring(am_pm+2 );
                
                date = isdate+istime;
                dt_str = dtpart(date);            
            }
        }
        else
        {
            int  comm = dt_str[3].lastIndexOf(':');
            int  dot  = dt_str[3].lastIndexOf('.');
            if( comm> dot)
            {
                istime = dt_str[3].substring(0,comm+1);
                isdate = dt_str[3].substring(comm+1);
            }
            else
            {
                istime = dt_str[3].substring(0,dot+1 );
                isdate = dt_str[3].substring(dot+1);
            }
            isdate = isdate.trim();
            int space = isdate.indexOf(' ');
            if( space!=-1 )
            {
                istime = istime + isdate.substring(0,space );
                isdate = isdate.substring(space);
                date = isdate + " " + istime;
                dt_str = dtpart(date);
            }
        }
    }

	}catch( Exception  err)
	  {
	   return null;
	  }
  
    return dt_str; 
  }



   public static double StrToDbl(int[]  dtstr) throws HpException
   {
    double  d=0.0000;

    UdtDatetime Datetime = new UdtDatetime();
    GGRESULT ddate = Datetime.dtcommon(dtstr);

    if( ddate.valued>=0 )
        d = ddate.valued + ddate.valuet;
    else
        d = ddate.valued - ddate.valuet;

    return  d;
   }
}

⌨️ 快捷键说明

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