hpdatetime.java
来自「一个简单的visio程序。」· Java 代码 · 共 2,210 行 · 第 1/5 页
JAVA
2,210 行
double dbl = getdt_db( new VString(exp.getfixedString() ) );
if(dbl < -657435 || dbl > 2958465)
throw new HpException(5,"Invalid procedure call");
dbl -= Math.floor( dbl);
return new HDate(dbl);
}
public static HDate TIMEVALUE(String exp) throws HpException
{
double dbl = getdt_db( new VString(exp) );
if(dbl < -657435 || dbl > 2958465)
throw new HpException(5,"Invalid procedure call");
dbl -= Math.floor( dbl);
return new HDate(dbl);
}
/**
*DateAdd(interval,number,date)
*Returns a Variant containing a date to which a specified time interval has
*been added.
*/
public static Variant DATEADD(Variant varstr,Variant varnum,Variant exp)
throws HpException
{
HCDateTimeStruct tm = new HCDateTimeStruct();
int i=0, strint=0 ,num=0;
double yd=0, num_dbl;
num_dbl = hpstring.get_db( varnum);
double dbl = getdt_db( exp );
tm.DT_DblToStruc(dbl);
int y = tm.dt_year;
int m = tm.dt_month;
int d = tm.dt_mday;
int h = tm.dt_hour;
int n = tm.dt_minute;
int s = tm.dt_second;
int q = tm.dt_season;
int w = tm.dt_week;
String str = hpstring.get_str( varstr );
if( str==null )
throw new HpException(94, "Invalid use of null");
str = str.toLowerCase();
if ( str.compareTo("yyyy") == 0 ) //year
strint = 1;
else if ( str.compareTo("q") == 0 ) //Quarter
strint = 2;
else if ( str.compareTo("m") == 0 ) //Month
strint = 3;
else if ( str.compareTo("y") == 0 ) //Day of Year
strint = 4;
else if ( str.compareTo("d") == 0 ) //Day of month
strint = 5;
else if ( str.compareTo("w") == 0 ) //Weekday
strint = 6;
else if ( str.compareTo("ww") == 0 ) //Week
strint = 7;
else if ( str.compareTo("h") == 0 ) //Hour
strint = 8;
else if ( str.compareTo("n") == 0 ) //minute
strint = 9;
else if ( str.compareTo("s") == 0 ) //second
strint = 10;
else
throw new HpException(95,"Invalid procedure call") ;
int da[] = new int[3], ti[] = new int[3];
UdtDatetime ud = new UdtDatetime();
double dat, t, tmpd=0;
switch (strint)
{
case 1 : /* yyyy */
num = (int)(num_dbl);
y += num;
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
if ( (y%4 == 0 && y%100 != 0) || (y%400 == 0) ){
if ( (m == 2) && (d >29) )
d = 29;
}
else
{
if ( (m == 2) && (d > 28) )
d = 28;
}
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 )
tmpd = dat - t;
else
tmpd = dat + t;
tmpd = tmpd + yd;
break;
case 2 : /* q */
num = (int)(num_dbl);
if ( y < 100 )
y += 1900;
y += (int)(num/4);
if (num >= 0)
{
m += (int)( num%4 )*3;
if ( m > 12 )
{
m -= 12;
y += 1;
}
}
else
{
if ( -(num%4)*3 > m )
{
y -= 1;
m = 12+m + ( num%4 )*3 ;
}
else
m = m + ( num%4 ) * 3 ;
}
int daa=0;
for( daa=0, i=1; i < m; i++ )
daa += tm.Month_Day( (int)y,i );
daa += d+1;
if ( (y<1 && daa<1) || ( y>9999 && daa>365) )
throw new HpException(95,"Invalid procedure call");
if ( (y%4 == 0 && y%100 != 0) || (y%400 ==0) )
{
if ( (m == 2) && (d > 29) )
d = 29;
}
else if ( (m == 2) && (d > 28) )
d = 28;
if ( ( (m == 4) || (m == 6) || (m == 9) || (m == 11) ) && (d == 31) )
d = 30;
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 )
tmpd = dat - t;
else
tmpd = dat + t;
tmpd = tmpd + yd;
break;
case 3 : /* m */
num = (int)(num_dbl);
y += (int)(num/12);
if (num >= 0)
{
m += (int)num%12;
if ( m>12 )
{
y += 1;
m -= 12;
}
}
else if ( -(num%12) < m )
m += (int)num%12;
else
{
y -= 1;
m = 12 + m + (int)num%12 ;
}
int yda;
for (yda=0, i=1; i < m; i++ )
yda += tm.Month_Day( (int)y,i );
yda += d+1;
if ( (y < 1 && yda < 1) || (y > 9999 && yda > 365) )
throw new HpException(95,"Invalid procedure call");
if ( (y%4 == 0 && y%100 != 0) || (y%400 == 0) )
{
if ( (m == 2) && (d > 29) )
d = 29;
}
else if ((m == 2) && (d > 28) )
d=28;
if ( ( (m == 4) || (m == 6) || (m == 9) || (m == 11) ) && (d == 31) )
d = 30;
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 )
tmpd = dat - t;
else
tmpd = dat + t;
tmpd = tmpd + yd;
break;
case 4: /* y */
case 5: /* d */
case 6: /* w */
num = (int)num_dbl;
yd = (double)num;
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 )
tmpd = dat - t;
else
tmpd = dat + t;
tmpd = tmpd + yd;
break;
case 7: /* ww */
num = (int)(num_dbl);
yd = (double)num*7;
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 )
tmpd = dat - t;
else
tmpd = dat + t;
tmpd = tmpd + yd;
break;
case 8: /* h */
num = (int)( num_dbl) ;
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if( dat>0 )
{
if( (double)num==num_dbl )
yd = num_dbl/24 ;
else
yd = num/24;
tmpd = dat + t + yd ;
}
else
{
num = (int)(num_dbl);
if( (double)num==num_dbl && (dbl>=0 || (dbl-(int)dbl)==0 ) )
{
yd = num/24;
tmpd = dat - t + 2 * yd - num_dbl/24;
}
else
{
yd = num/24;
tmpd = dat + t + yd + ( (dbl-num)/24- (int)((dbl-num)/24));// + 0.6345045552;
}
}
break;
case 9: /* n */
num = hpstring.dbl2int(num_dbl);
yd = (double)num/(24*60);
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 || dat==t )
tmpd = dat -t - yd + 2*(int)yd;
else
tmpd = dat + t + yd;
break;
case 10: /* s */
num = hpstring.dbl2int(num_dbl);
yd = (double)num/(24*3600);
if (y < 100 || y > 9999)
throw new HpException(95,"Invalid procedure call");
da[0] = m; da[1] = d; da[2] = y;
ti[0] = h; ti[1] = n; ti[2] = s;
dat = ud.isda(da);
t = ud.isti(ti);
if ( dat<0 )
tmpd = dat - t;
else
tmpd = dat + t;
tmpd = tmpd + yd;
break;
}
return new VDate(tmpd);
}
/**
*DatePart(interval, date[, firstdayofweek[, firstweekofyear]])
*Returns a specified part of a given date.
*/
public static short DATEPART(Variant varstr,Variant exp) throws HpException
{
HCDateTimeStruct tm = new HCDateTimeStruct();
double dbl=0;
short 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(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
partint = tm.dt_week;
break;
case 7: //ww
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 ;
} //end datepart
/*------------ Function: DatePart(interval, date, firstdayofweek) 3--------------*/
public static short DATEPART(Variant varstr,Variant exp, Variant firstdayofweek) throws HpException
{
HCDateTimeStruct tm = new HCDateTimeStruct();
double dbl=0;
short strint=0;
int firstdw ;
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 )
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?