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