hcdatetimestruct.java

来自「一个简单的visio程序。」· Java 代码 · 共 189 行

JAVA
189
字号
package HPCore.stdfunc;
import  HPCore.Exception.*;

public class HCDateTimeStruct
{
    public int dt_year;
    public int dt_month;
    public int dt_season;
    public int dt_mday;	/* the day of a month */
    public int dt_yday;	/* the day of a year  */
    public int dt_week;    /* the day of week*/
    public int dt_wweek;	/* the week of a year */
    public int dt_hour;
    public int dt_minute;
    public int dt_second;

    public HCDateTimeStruct(){ }

    public void DT_DblToStruc(double dtvaldb) throws HpException
    {
       int      i;
       double   time;
       long     data;

       if( dtvaldb>2958465.99998843 )
           throw new HpException( 13,"Type mismatch");

       time = dtvaldb - (long)dtvaldb;
       if( time>0 )
          data = (long)(dtvaldb-time);
       else if(time<-0.5 )
          data = (long)(dtvaldb+time+1);
       else 
          data = (long)(dtvaldb + time);

       time = (time>=0) ? time : -time;

       dt_year=1899;
       dt_month=12;
       dt_mday=30;
       dt_yday=0;
       dt_wweek=1;

       if(dtvaldb >= 0)
          {
          /* get year  */
          while(data>366)
             {
             dt_year++;
             if((dt_year%4==0 && dt_year%100!=0) ||(dt_year%400 == 0))
                data -= 366;
             else
                data -= 365;
             }
          /*  get month  */
          while(data > Month_Day(dt_year,dt_month))
             {
             data -= Month_Day(dt_year,dt_month);
             dt_month++;
             if(dt_month>12)
                {
                dt_month=1;
                dt_year++;
                }
             }
          /*  get mday  */
          dt_mday += data;
          while(dt_mday > Month_Day(dt_year,dt_month))
             {
             dt_mday -= Month_Day(dt_year,dt_month);
             dt_month++;
             if(dt_month > 12)
                {
                dt_month = 1;
                dt_year++;
                }
             }
          }
       else
          {
          /* get year  */
          while(data<=-366)
             {
             if(dt_year%4==0 && dt_year%100!=0 || dt_year%400 == 0)
                data += 366;
             else
                data += 365;
             dt_year--;
             }
          /*  get month  */
          while(-data >= Month_Day(dt_year,dt_month))
             {
             if(dt_month==12)
                data += 30;
             else
                data += Month_Day(dt_year,dt_month);
             dt_month--;
             if(dt_month<1)
                {
                dt_month=12;
                dt_year--;
                }
             dt_mday = Month_Day(dt_year,dt_month);
             }
          /*  get mday  */
          dt_mday += data;
          if(dt_mday <= 0) /*Month_Day(dt_year,dt_month))*/
             {
             dt_month--;
             dt_mday += Month_Day(dt_year,dt_month);
             if(dt_month < 1)
                {
                dt_month = 12;
                dt_year--;
                }
             }
       }
       /*  get season */
       if(dt_month>0 && dt_month<=3)
          dt_season=1;
       if(dt_month>3 && dt_month<=6)
          dt_season=2;
       if(dt_month>6 && dt_month<=9)
          dt_season=3;
       if(dt_month>9 && dt_month<=12)
          dt_season=4;
       /* get yday   */
       i=1;
       while(i<dt_month)
          {
          dt_yday += Month_Day(dt_year,i);
          i++;
          }
       dt_yday += dt_mday;
       /* get week   */
       dt_week = (int)( dtvaldb % 7 );
       if(dt_week <= 0)
          dt_week=7+dt_week;

       /* get wweek  */
       if ( (dt_week == 7) && (dt_yday % 7 == 0))
    	   dt_wweek+=dt_yday/7-1;
       else
    	  dt_wweek += dt_yday / 7;
       if(dt_week < dt_yday % 7)
          dt_wweek++;
       /* get hour   */
       dt_hour = (int)(time * 24+0.00013);
       /* get minute */
       dt_minute = (int)( (time * 24 - dt_hour) * 60 +0.001);	/* '0.00001'*/
       /* get second */
       dt_second = (int)( ( (time * 24 - dt_hour) * 60 - dt_minute ) * 60 +0.5);

       }

    public int Month_Day(int y,int m)
    {
		int d=0;

		switch (m)
		   {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				d = 31;
				break;

			case 2:
				if ( (y%4 == 0 && y%100 != 0) || (y%400 == 0) )
					d = 29;
				else
					d = 28;
				break;

			case 4:
			case 6:
			case 9:
			case 11:
				d = 30;
				break;
		   }
		return d;
	 } /* End of Month_Day Function */
}

⌨️ 快捷键说明

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