home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / util / date.java < prev    next >
Text File  |  1995-08-11  |  8KB  |  323 lines

  1. /*
  2.  * @(#)Date.java    1.11 95/05/12 Arthur van Hoff
  3.  * 
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * Permission to use, copy, modify, and distribute this software and its
  7.  * documentation for NON-COMMERCIAL purposes and without fee is hereby
  8.  * granted provided that this copyright notice appears in all copies. Please
  9.  * refer to the file "copyright.html" for further important copyright and
  10.  * licensing information.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
  15.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  16.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  17.  * ITS DERIVATIVES.
  18.  */
  19.  
  20. package java.util;
  21.  
  22. /**
  23.  * A wrapper for a date. This class lets you manipulate
  24.  * dates in a system independent way. To print today's
  25.  * date use:
  26.  * <pre>
  27.  *    Date d = new Date();
  28.  *    System.out.println("today = " + d);
  29.  * </pre>
  30.  * To find out what day corresponds to a particular date:
  31.  * <pre>
  32.  *    Date d = new Date(63, 0, 16);    // January 16, 1963
  33.  *    System.out.println("Day of the week: " + d.getDay());
  34.  * </pre>
  35.  * The date can be set and examined broken down
  36.  * according to the local time zone into
  37.  * year, month, day, ...
  38.  *
  39.  * @version     1.11, 12 May 1995
  40.  * @author    James Gosling, Arthur van Hoff
  41.  */
  42. public
  43. class Date {
  44.     private long value;
  45.     private boolean valueValid;
  46.     private boolean expanded;
  47.  
  48.     private short tm_millis;    /* miliseconds within the second - [0,999] */
  49.     private byte tm_sec;    /* seconds after the minute - [0, 61] for
  50.                  * leap seconds */
  51.     private byte tm_min;    /* minutes after the hour - [0, 59] */
  52.     private byte tm_hour;    /* hour since midnight - [0, 23] */
  53.     private byte tm_mday;    /* day of the month - [1, 31] */
  54.     private byte tm_mon;    /* months since January - [0, 11] */
  55.     private byte tm_wday;    /* days since Sunday - [0, 6] */
  56.     private short tm_yday;    /* days since January 1 - [0, 365] */
  57.     private int tm_year;    /* years since 1900 */
  58.     private int tm_isdst;    /* flag for alternate daylight savings time */
  59.     /**
  60.      * Creates today's date/time.
  61.      */
  62.     public Date () {
  63.     this(System.currentTimeMillis());
  64.     }
  65.  
  66.     /**
  67.      * Creates a date.
  68.      * The fields are normalized before the Date object is created.
  69.      * The arguments do not have to be in the correct range. For example,
  70.      * the 32nd of January is correctly interpreted as the 1st of February.
  71.      * You can use this to figure out what day a particular date falls on.
  72.      * @param year    a year after 1900
  73.      * @param month    a month between 0-11
  74.      * @param date    day of the month between 1-31
  75.      */
  76.     public Date (long V) {
  77.     value = V;
  78.     valueValid = true;
  79.     expanded = false;
  80.     }
  81.  
  82.     /**
  83.      * Creates a date.
  84.      * The fields are normalized before the Date object is created.
  85.      * The arguments do not have to be in the correct range. For example,
  86.      * the 32nd of January is correctly interpreted as the 1st of February.
  87.      * You can use this to figure out what day a particular date falls on.
  88.      * @param year    a year after 1900
  89.      * @param month    a month between 0-11
  90.      * @param date    day of the month between 1-31
  91.      */
  92.     public Date (int year, int month, int date) {
  93.     this(year, month, date, 0, 0, 0);
  94.     }
  95.  
  96.     /**
  97.      * Creates a date.
  98.      * The fields are normalized before the Date object is created.
  99.      * The arguments do not have to be in the correct range. For example,
  100.      * the 32nd of January is correctly interpreted as the 1st of February.
  101.      * You can use this to figure out what day a particular date falls on.
  102.      * @param year    a year after 1900
  103.      * @param month    a month between 0-11
  104.      * @param date    day of the month between 1-31
  105.      * @param hrs    hours between 0-23
  106.      * @param min    minutes between 0-59
  107.      */
  108.     public Date (int year, int month, int date, int hrs, int min) {
  109.     this(year, month, date, hrs, min, 0);
  110.     }
  111.  
  112.     /**
  113.      * Creates a date. The fields are normalized before the Date object is
  114.      * created. The arguments do not have to be in the correct range. For
  115.      * example, the 32nd of January is correctly interpreted as the 1st of
  116.      * February. You can use this to figure out what day a particular date
  117.      * falls on.
  118.      * @param year    a year after 1900
  119.      * @param month    a month between 0-11
  120.      * @param date    day of the month between 1-31
  121.      * @param hrs    hours between 0-23
  122.      * @param min    minutes between 0-59
  123.      * @param sec    seconds between 0-59
  124.      */
  125.     public Date (int year, int month, int date, int hrs, int min, int sec) {
  126.     expanded = true;
  127.     valueValid = false;
  128.     tm_millis = 0;
  129.     tm_sec = (byte) sec;
  130.     tm_min = (byte) min;
  131.     tm_hour = (byte) hrs;
  132.     tm_mday = (byte) date;
  133.     tm_mon = (byte) month;
  134.     tm_wday = 0;
  135.     tm_yday = 0;
  136.     tm_year = year;
  137.     computeValue();
  138.     expand();
  139.     }
  140.  
  141.     /**
  142.      * Returns the year after 1900.
  143.      */
  144.     public int getYear() {
  145.     if (!expanded)
  146.         expand();
  147.     return tm_year;
  148.     }
  149.  
  150.     /**
  151.      * Sets the year.
  152.      */
  153.     public void setYear(int v) {
  154.     tm_year = v;
  155.     valueValid = false;
  156.     }
  157.  
  158.     /**
  159.      * Returns the month. ie: 0-11
  160.      */
  161.     public int getMonth() {
  162.     if (!expanded)
  163.         expand();
  164.     return tm_mon;
  165.     }
  166.  
  167.     /**
  168.      * Sets the month.
  169.      */
  170.     public void setMonth(byte v) {
  171.     tm_mon = v;
  172.     valueValid = false;
  173.     }
  174.  
  175.     /**
  176.      * Return the day of the month. ie: 1-31
  177.      */
  178.     public int getDate() {
  179.     if (!expanded)
  180.         expand();
  181.     return tm_mday;
  182.     }
  183.  
  184.     /**
  185.      * Sets the date.
  186.      */
  187.     public void setDate(byte v) {
  188.     tm_mday = v;
  189.     valueValid = false;
  190.     }
  191.  
  192.     /**
  193.      * Returns the day of the week. ie: 0-6
  194.      */
  195.     public int getDay() {
  196.     if (!expanded)
  197.         expand();
  198.     else if (tm_wday < 0 || !valueValid)
  199.         computeValue(), expand();
  200.     return tm_wday;
  201.     }
  202.  
  203.     /**
  204.      * Sets the day of the week.
  205.      */
  206.     public void setDay(byte v) {
  207.     tm_wday = v;
  208.     valueValid = false;
  209.     }
  210.  
  211.     /**
  212.      * Returns the hour. ie: 0-23
  213.      */
  214.     public int getHours() {
  215.     if (!expanded)
  216.         expand();
  217.     return tm_hour;
  218.     }
  219.  
  220.     /**
  221.      * Sets the hours.
  222.      */
  223.     public void setHours(byte v) {
  224.     tm_hour = v;
  225.     valueValid = false;
  226.     }
  227.  
  228.     /**
  229.      * Returns the minute. ie: 0-59
  230.      */
  231.     public int getMinutes() {
  232.     if (!expanded)
  233.         expand();
  234.     return tm_min;
  235.     }
  236.  
  237.     /**
  238.      * Sets the minutes.
  239.      */
  240.     public void setMinutes(byte v) {
  241.     tm_min = v;
  242.     valueValid = false;
  243.     }
  244.  
  245.     /**
  246.      * Returns the second. ie: 0-59
  247.      */
  248.     public int getSeconds() {
  249.     if (!expanded)
  250.         expand();
  251.     return tm_sec;
  252.     }
  253.  
  254.     /**
  255.      * Sets the seconds.
  256.      */
  257.     public void setSeconds(byte v) {
  258.     tm_sec = v;
  259.     valueValid = false;
  260.     }
  261.  
  262.     public long getTime() {
  263.     if (!valueValid)
  264.         computeValue();
  265.     return value;
  266.     }
  267.  
  268.     /**
  269.      * Checks whether this date comes before another date.
  270.      */
  271.     public boolean before(Date when) {
  272.     return getTime() < when.getTime();
  273.     }
  274.  
  275.     /**
  276.      * Checks whether  this date comes after another date.
  277.      */
  278.     public boolean after(Date when) {
  279.     return getTime() > when.getTime();
  280.     }
  281.  
  282.     /**
  283.      * Compares this object against some other object.
  284.      * @param obj        the object to compare with
  285.      * @return         true if the object is the same
  286.      */
  287.     public boolean equals(Object obj) {
  288.     if ((obj != null) && (obj instanceof Date)) {
  289.         return getTime() == ((Date) obj).getTime();
  290.     }
  291.     return false;
  292.     }
  293.  
  294.     /**
  295.      * Computes a hashCode.
  296.      */
  297.     public int hashCode() {
  298.     return (int) getTime();
  299.     }
  300.  
  301.     /**
  302.      * Converts a date to a string, using the UNIX ctime conventions.
  303.      */
  304.     public native String toString();
  305.  
  306.     /**
  307.      * Converts a date to a string, using the locale's conventions.
  308.      */
  309.     public native String toLocaleString();
  310.  
  311.     /**
  312.      * Converts a date to a string, using the Internet GMT conventions.
  313.      */
  314.     public native String toGMTString();
  315.  
  316.     /*
  317.      * Gets date values.
  318.      */
  319.     private native void expand();
  320.     private native void computeValue();
  321.  
  322. }
  323.