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 + -
显示快捷键?