hpdatetime.java

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

JAVA
2,210
字号
        strint = 4;
    else if( str.compareTo("d")==0  )
        strint = 5;
    else if( str.compareTo("w")==0  )
        strint = 6;
    else if( str.compareTo("ww")==0 )
        strint = 7;
    else if( str.compareTo("h")==0  )
        strint = 8;
    else if( str.compareTo("n")==0  )
        strint = 9;
    else if( str.compareTo("s")==0  )
        strint = 10;
    else
        throw new HpException(8,"Illegal function call");


    dbl = getdt_db( exp );
    tm.DT_DblToStruc(dbl);

    int  partint=0;
    switch( strint )
    {
        case 1:    //yyyy
            partint = tm.dt_year;
            break;
        case 2:    //q
            partint = tm.dt_season;
            break;
        case 3:    //m
            partint = tm.dt_month;
            break;
        case 4:    //y
            partint = tm.dt_yday;
            break;
        case 5:    //d
            partint = tm.dt_mday;
            break;
        case 6:    //w
            firstdw = hpstring.dbl2int( hpstring.get_db(firstdayofweek) );
            if( firstdw<0 ||  firstdw>7 )
               throw new HpException(95,"Invalid procedure call");

            if( firstdw==0 )
            {
                partint = tm.dt_week;
            }
            else if( firstdw>tm.dt_week )
            {
                partint = 7 - (firstdw - tm.dt_week) + 1;
            }
            else if( firstdw==tm.dt_week )
            {
                partint = 1 ;
            }
            else
                partint = tm.dt_week - firstdw + 1;

            break;

            case 7:    //ww
            firstdw = hpstring.dbl2int(hpstring.get_db(firstdayofweek ));
            if( firstdw<0 ||  firstdw>7 )
               throw new HpException(95,"Invalid procedure call");

        	HCDateTimeStruct	tm1 = new HCDateTimeStruct();
            UdtDatetime         udt = new UdtDatetime();
            int stand[] = {1,1,tm.dt_year,0,0,0};  /*Sunday---> tm.dt_week=1, Saturday---> tm.dt_week=7 */
            dbl = udt.StrToDbl(stand);
            tm1.DT_DblToStruc(dbl);

            if( tm.dt_week==tm1.dt_week )
            {
                partint = tm.dt_wweek;
            }
            else if( tm.dt_week>tm1.dt_week )
            {
                if( tm.dt_week >= firstdw && firstdw>tm1.dt_week)
                    partint = tm.dt_wweek+1;
                else
                {
                    partint = tm.dt_wweek;
                }
            }
            else if( firstdw>tm1.dt_week )
            {
                partint = tm.dt_wweek;
            }
            else if( firstdw>tm.dt_week )
            {
                partint = tm.dt_wweek-1;
            }
            else
            {
                partint = tm.dt_wweek;
            }
            break;

        case 8:    //h
            partint = tm.dt_hour;
            break;
        case 9:    //n
            partint = tm.dt_minute;
            break;
        case 10:   //s
            partint = tm.dt_second;
            break;
    }

    return  (short)partint;
    }

    /*--- Function: DATEPART( varstr,exp ,firstdayofweek,  firstweekofyear)  4---*/
    public static short DATEPART(Variant varstr,Variant exp ,Variant firstdayofweek,
        Variant  firstweekofyear) throws HpException
	{
	HCDateTimeStruct	    tm = new HCDateTimeStruct();
	double                  dbl=0;
    short                   strint=0;
    int                     firstdw  , firstwy;

    String   str = hpstring.get_str( varstr );
    str = str.toLowerCase();
    if( str.compareTo("yyyy")==0    )
        strint = 1;
    else if( str.compareTo("q")==0  )
        strint = 2;
    else if( str.compareTo("m")==0  )
        strint = 3;
    else if( str.compareTo("y")==0  )
        strint = 4;
    else if( str.compareTo("d")==0  )
        strint = 5;
    else if( str.compareTo("w")==0  )
        strint = 6;
    else if( str.compareTo("ww")==0 )
        strint = 7;
    else if( str.compareTo("h")==0  )
        strint = 8;
    else if( str.compareTo("n")==0  )
        strint = 9;
    else if( str.compareTo("s")==0  )
        strint = 10;
    else
        throw new HpException(8,"Illegal function call");


    dbl = getdt_db( exp );
    tm.DT_DblToStruc(dbl);

    int  partint=0;
    switch( strint )
    {
        case 1:    //yyyy
            partint = tm.dt_year;
            break;
        case 2:    //q
            partint = tm.dt_season;
            break;
        case 3:    //m
            partint = tm.dt_month;
            break;
        case 4:    //y
            partint = tm.dt_yday;
            break;
        case 5:    //d
            partint = tm.dt_mday;
            break;
        case 6:    //w
            firstdw = hpstring.dbl2int(hpstring.get_db(firstdayofweek));
            if( firstdw<0 ||  firstdw>7 )
               throw new HpException(95,"Invalid procedure call");
            if( firstdw==0 )
            {
                partint = tm.dt_week;
            }
            else if( firstdw>tm.dt_week )
            {
                partint = 7 - (firstdw - tm.dt_week) + 1;
            }
            else if( firstdw==tm.dt_week )
            {
                partint = 1 ;
            }
            else
                partint = tm.dt_week - firstdw + 1;

            break;

            case 7:    //ww
            firstdw = hpstring.dbl2int( hpstring.get_db(firstdayofweek));
            firstwy = hpstring.dbl2int( hpstring.get_db(firstweekofyear) );

            if( firstdw<0 || firstdw>7 || firstwy>4 || firstwy<0 )
                throw new HpException(95,"Invalid procedure call");

            if( firstwy<=1 )
            {
                if(firstdw!=0 && ((tm.dt_week + firstdw) % 7==0 ) )
                    partint = tm.dt_wweek + 1;
                else
                    partint = tm.dt_wweek;
            }
            else if( firstwy==2 )
            {
                int       fst_wday, end_wday, year;
            	HCDateTimeStruct	    tm1 = new HCDateTimeStruct();
            	HCDateTimeStruct	    tm2 = new HCDateTimeStruct();

                UdtDatetime  udt=new UdtDatetime();

                year = tm.dt_year;
                int[] standdt =  {1,1,0,0,0};
                dbl = udt.StrToDbl(standdt);

                tm1.DT_DblToStruc(dbl);
                if( tm1.dt_week>4 )
                {
                    int[] dt = {12,31,year,0,0,0};
                    double dd = udt.StrToDbl(dt);
                    tm2.DT_DblToStruc(dd);
                    end_wday = tm2.dt_wweek;
                    if( firstdw % 7==0 )
                        partint = tm2.dt_wweek - 1;
                    else
                        partint = tm2.dt_wweek;

                }
                else
                    partint = tm.dt_wweek;
            }
            else if( firstwy==3 )
            {
                int  yer, yday=tm.dt_yday ;
            	HCDateTimeStruct    ymd = new HCDateTimeStruct();
                UdtDatetime  dt=new UdtDatetime();

                int[] stadt =  {1,1,tm.dt_year,0,0,0};
                dbl = dt.StrToDbl(stadt);
                ymd.DT_DblToStruc(dbl);
                int yearwd = ymd.dt_week;   //find first day of the year what's the day.
                yday = yday - yearwd - firstdw+1;

                partint = (int)( yday / 7 ) ;
                if( yday<0 )
                    partint = partint + 52 - (int)(yday / 6 ) ;
                else
                    partint +=1;
            }
            break;

        case 8:    //h
            partint = tm.dt_hour;
            break;
        case 9:    //n
            partint = tm.dt_minute;
            break;
        case 10:   //s
            partint = tm.dt_second;
            break;
    }

    return (short)partint;
	}


    /**
	 *DateDiff(interval,date1,date2)
	 *Returns the number of time intervals between two specified dates.
	 */
    public static int DATEDIFF( Variant varstr, Variant var1, Variant var2)
        throws HpException
    {
	double               dblv1=0,dblv2=0;
    HCDateTimeStruct     tm = new HCDateTimeStruct();
	int				     y1,y2,m1,m2,w1,w2 ;

    dblv1 = getdt_db( var1 );
    dblv2 = getdt_db( var2 );

    HCDateTimeStruct  tm1 = new HCDateTimeStruct();
    tm1.DT_DblToStruc(dblv1);
	int year1	= tm1.dt_year;
    int month1  = tm1.dt_month;
	int mday1	= tm1.dt_mday;
	int yday1	= tm1.dt_yday;
	int week1	= tm1.dt_week;
	int wweek1  = tm1.dt_wweek;
	int hour1	= tm1.dt_hour;
	int minute1 = tm1.dt_minute;
	int second1 = tm1.dt_second;
	int season1 = tm1.dt_season;

    HCDateTimeStruct tm2 = new HCDateTimeStruct();
    tm2.DT_DblToStruc(dblv2);
    int year2   = tm2.dt_year;
	int month2  = tm2.dt_month;
	int mday2   = tm2.dt_mday;
	int yday2   = tm2.dt_yday;
	int week2   = tm2.dt_week;
	int wweek2  = tm2.dt_wweek;
	int hour2   = tm2.dt_hour;
	int minute2 = tm2.dt_minute;
	int second2 = tm2.dt_second;
    int season2 = tm2.dt_season;

    int	  strint=0 ;
    String    str = hpstring.get_str(varstr);
    str = str.toLowerCase();
    if( str.compareTo("yyyy")==0    )
        strint = 1;
    else if( str.compareTo("q")==0  )
        strint = 2;
    else if( str.compareTo("m")==0  )
        strint = 3;
    else if( str.compareTo("y")==0  )
        strint = 4;
    else if( str.compareTo("d")==0  )
        strint = 5;
    else if( str.compareTo("w")==0  )
        strint = 6;
    else if( str.compareTo("ww")==0 )
        strint = 7;
    else if( str.compareTo("h")==0  )
        strint = 8;
    else if( str.compareTo("n")==0  )
        strint = 9;
    else if( str.compareTo("s")==0  )
        strint = 10;
    else
        throw new HpException(95,"Invalid procedure call");

    int   	dd=0,d1=0,d2=0;
    int     date1,date2, md1,md2;
    double  numd,dtime=0,num1,num2;
	switch (strint)
	{
	    case 1:      /* yyyy */
		dd = year2 - year1;
		break;

		case 2:		/* q */
		dd = (year2 - year1) * 4;
		dd += (season2 - season1);
		break;

		case 3:		/* m */
		dd = (year2 - year1) * 12 + (month2 - month1);
		break;

		case 4: 		/* y  */
		case 5:		/* d  */
		case 6:		/* w  */
		case 7:		/* ww */
		y1    = year1;
		y2    = year2;
		m1    = month1;
		m2    = month2;
		md1   = mday1;
		md2   = mday2;
		num1  = dblv1 ;
		num2  = dblv2 ;
		date1 = (int)(dblv1);
		date2 = (int)(dblv2);
		if(dblv2<dblv1){
			y1    = year2;
			y2    = year1;
			m1    = month2;
			m2    = month1;
			md1   = mday2;
			md2   = mday1;
			num1  = dblv2;
			num2  = dblv1;
			date1 = (int)(dblv2);
			date2 = (int)(dblv1);
		}

        int  ye=0;
		for (  ye = y1; ye < y2; ye++ ){
			if( (ye%4 == 0 && ye%100 != 0 ) || (ye%400 == 0) )
			dd += 366;
			else
			dd += 365;
			}
		for(ye=1; ye < m1; ye++ )
			d1 += tm.Month_Day( y1, ye );
		for(ye=1; ye < m2; ye++ )
			d2 += tm.Month_Day( y2,ye );
			dd = dd - d1 - md1 + d2 + md2 ;

			if (strint == 6)	   /*  w	*/
			dd=(int)(dd/7);

			if(strint == 7)		   /*  ww   */
			{
			w1 = date1%7;
			if (w1<=0)
				w1 = w1+7;
			w2 = date2%7 ;
			if (w2<=0)
				w2 = w2+7;
			if (dd<0)
				dd = -dd;
			dd = dd/7;
			if( w1>w2 )
				dd++;
			}	/* endif */
				if(dblv1>dblv2)
					dd = -dd;
				break;

		case 8	:	   /* h */
		    if( dblv1 == dblv2 )
		        dtime = 0;
		    else if( (dblv1<0 && dblv2<0) || (dblv1>0 && dblv2>=0) )
                dtime = (dblv2-dblv1) * 24;
            else if( dblv1<0 && dblv2>=0 )
                dtime = (dblv2-dblv1+1) * 24 - 1 ;
            else
                dtime = (dblv2-dblv1-1) * 24 + 1;

			dd = (int)Math.floor(dtime);
			break;

  		case 9 :	  /* n */
            if( (dblv1<0 && dblv2<0) || (dblv1>0 && dblv2>0) )
                dtime = (dblv2-dblv1) * 24 * 60;
            else if( dblv1<0 && dblv2>0 )
                dtime = (dblv2-dblv1+1) * 24 * 60 - 1 ;
            else
                dtime = (dblv2-dblv1-1) * 24 * 60 + 1;

			dd = (int)Math.floor(dtime);
			break;

		case 10:   /* s */
            if( dblv1==dblv2 )
                dtime = 0;
            else if( (dblv1<0 && dblv2<0) || (dblv1>0 && dblv2>0) )
                dtime = (dblv2-dblv1) * 24 * 60 * 60;
            else if( dblv1<0 && dblv2>=0 )
                dtime = (dblv2

⌨️ 快捷键说明

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