当前位置:  技术问答>java相关

有谁知道在《java2核心技术》卷I中的光盘中的corejava包的Day类的两个关于日期算法???

    来源: 互联网  发布时间:2015-04-06

    本文导语:  //Day类的源码为: package corejava; import java.util.*; import java.io.*; /**    Stores dates and perform date arithmetic.    This is another date class, but more convenient that     java.util.Date or java.util.Calendar    @version 1.20 5 Oc...

//Day类的源码为:
package corejava;

import java.util.*;
import java.io.*;

/**
   Stores dates and perform date arithmetic.

   This is another date class, but more convenient that 
   java.util.Date or java.util.Calendar

   @version 1.20 5 Oct 1998
   @author Cay Horstmann
*/

public class Day implements Cloneable, Serializable
{
/**
      Constructs today's date
    */
    public Day()
    {
     GregorianCalendar todaysDate = new GregorianCalendar();
        year = todaysDate.get(Calendar.YEAR);
        month = todaysDate.get(Calendar.MONTH) + 1;
        day = todaysDate.get(Calendar.DAY_OF_MONTH);
    }

   /**
      Constructs a specific date

      @param yyyy year (full year, e.g., 1996, 
         not starting from 1900)
      @param m month
      @param d day
      @exception IllegalArgumentException if yyyy m d not a 
         valid date
    */
      
   public Day(int yyyy, int m, int d) 
   {
   year = yyyy;
       month = m;
       day = d;
       if (!isValid()) 
         throw new IllegalArgumentException();
   }
   
   /**
      Advances this day by n days. For example. 
      d.advance(30) adds thirdy days to d

      @param n the number of days by which to change this
         day (can be  0 if this day comes after b)
    */
    public int daysBetween(Day b)
    {
     return toJulian() - b.toJulian();
    }

   /**
      A string representation of the day
      
      @return a string representation of the day
    */
    public String toString()
    {
     return "Day[" + year + "," + month + "," + day + "]";
    }

   /**
      Makes a bitwise copy of a Day object
      
      @return a bitwise copy of a Day object
    */
    public Object clone()
    {
     try
        {
         return super.clone();
        }
        catch (CloneNotSupportedException e)
        {
         // this shouldn't happen, since we are Cloneable
            return null;
        }   
    }

   /**
      Compares this Day against another object
      
      @param obj another object
      @return true if the other object is identical to this Day object
    */
    public boolean equals(Object obj)
    {
     if (!getClass().equals(obj.getClass())) return false;
        Day b = (Day)obj;
        return day == b.day && month == b.month && year == b.year;
    }

   /**
      Computes the number of days between two dates
      
      @return true iff this is a valid date
    */
    private boolean isValid()
    {
     Day t = new Day();
        t.fromJulian(this.toJulian());
        return t.day == day && t.month == month && t.year == year;
    }

   /**
      @return The Julian day number that begins at noon of 
      this day
      Positive year signifies A.D., negative year B.C. 
      Remember that the year after 1 B.C. was 1 A.D.

      A convenient reference point is that May 23, 1968 noon
      is Julian day 2440000.

      Julian day 0 is a Monday.

      This algorithm is from Press et al., Numerical Recipes
      in C, 2nd ed., Cambridge University Press 1992
    */
    private int toJulian()
    {
     int jy = year;
        if (year  2) 
        {
         jm++;
        }
        else
        {
         jy--;
            jm += 13;
        }
        int jul = (int) (java.lang.Math.floor(365.25 * jy) + java.lang.Math.floor(30.6001*jm) + day + 1720995.0);
        int IGREG = 15 + 31*(10+12*1582);
        // Gregorian Calendar adopted Oct. 15, 1582
        if (day + 31 * (month + 12 * year) >= IGREG)
        // change over to Gregorian calendar
        {
         int ja = (int)(0.01 * jy);
            jul += 2 - ja + (int)(0.25 * ja);
        }
        return jul;
   }

   /**
      Converts a Julian day to a calendar date

      This algorithm is from Press et al., Numerical Recipes
      in C, 2nd ed., Cambridge University Press 1992
      
      @param j  the Julian date
    */

   private void fromJulian(int j)
   {  
   int ja = j;
       int JGREG = 2299161;
         /* the Julian date of the adoption of the Gregorian
            calendar    
         */   

      if (j >= JGREG)
      /* cross-over to Gregorian Calendar produces this 
         correction
      */
      {
  int jalpha = (int)(((float)(j - 1867216) - 0.25) / 36524.25);
          ja += 1 + jalpha - (int)(0.25 * jalpha);
      }
      int jb = ja + 1524;
      int jc = (int)(6680.0 + ((float)(jb-2439870) - 122.1)/365.25);
      int jd = (int)(365 * jc + (0.25 * jc));
      int je = (int)((jb - jd)/30.6001);
      day = jb - jd - (int)(30.6001 * je);
      month = je - 1;
      if (month > 12) month -= 12;
      year = jc - 4715;
      if (month > 2) --year;
      if (year 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 谁知道websphere的试用版怎么做掉?
  • 谁知道有类似启动kde的指令startkde,来启动gnome?
  • 谁知道jdbc有什么好一点的书,一定给分
  • 请问JBulider 4的序列号谁知到?能否提供给小弟?谢谢
  • 谁知道jbuilder3的KEY
  • 谁知道在哪儿可以找到Imap 4.5
  • 请问谁知道那有classes.zip for jdk1.2 ?
  • 谁知道哪儿有jbuilder5下载
  • 有谁知道关于Applet中怎么样调用html. 50分全送
  • jbuilder5企业版的序列号谁知道?
  • 谁知道JB的书籍下载?
  • 谁知道websphere4该怎么设置
  • 谁知道java认证的日期?
  • 谁知道Borland application server 5.0的serial number 和 key?
  • 请问有谁知道那里有Linux系统的ADSL拨号软件下载!谢谢!
  • 谁知道如何写脚本,一开机就执行某程序?
  • 谁知道哪里有jbulider4下载,我的机器跑jbulider5很慢!
  • 谁知道如何使用sygate作二级代理〉??
  • 有谁知道哪有下载 JB6 的地方?谢谢
  • 谁知道MySQL的驱动接口程序在那里下载?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3