⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 date.java

📁 java源代码 请看看啊 提点宝贵的意见
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * @(#)Date.java	1.74 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.TimeZone;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.ObjectInputStream;import java.lang.ref.SoftReference;/** * The class <code>Date</code> represents a specific instant * in time, with millisecond precision. * <p> * Prior to JDK&nbsp;1.1, the class <code>Date</code> had two additional * functions.  It allowed the interpretation of dates as year, month, day, hour, * minute, and second values.  It also allowed the formatting and parsing * of date strings.  Unfortunately, the API for these functions was not * amenable to internationalization.  As of JDK&nbsp;1.1, the * <code>Calendar</code> class should be used to convert between dates and time * fields and the <code>DateFormat</code> class should be used to format and * parse date strings. * The corresponding methods in <code>Date</code> are deprecated. * <p> * Although the <code>Date</code> class is intended to reflect  * coordinated universal time (UTC), it may not do so exactly,  * depending on the host environment of the Java Virtual Machine.  * Nearly all modern operating systems assume that 1&nbsp;day&nbsp;= * 24&nbsp;&times;&nbsp;60&nbsp;&times;&nbsp;60&nbsp;= 86400 seconds  * in all cases. In UTC, however, about once every year or two there  * is an extra second, called a "leap second." The leap  * second is always added as the last second of the day, and always  * on December 31 or June 30. For example, the last minute of the  * year 1995 was 61 seconds long, thanks to an added leap second.  * Most computer clocks are not accurate enough to be able to reflect  * the leap-second distinction.  * <p> * Some computer standards are defined in terms of Greenwich mean  * time (GMT), which is equivalent to universal time (UT).  GMT is  * the "civil" name for the standard; UT is the  * "scientific" name for the same standard. The  * distinction between UTC and UT is that UTC is based on an atomic  * clock and UT is based on astronomical observations, which for all  * practical purposes is an invisibly fine hair to split. Because the  * earth's rotation is not uniform (it slows down and speeds up  * in complicated ways), UT does not always flow uniformly. Leap  * seconds are introduced as needed into UTC so as to keep UTC within  * 0.9 seconds of UT1, which is a version of UT with certain  * corrections applied. There are other time and date systems as  * well; for example, the time scale used by the satellite-based  * global positioning system (GPS) is synchronized to UTC but is  * <i>not</i> adjusted for leap seconds. An interesting source of  * further information is the U.S. Naval Observatory, particularly  * the Directorate of Time at: * <blockquote><pre> *     <a href=http://tycho.usno.navy.mil>http://tycho.usno.navy.mil</a> * </pre></blockquote> * <p> * and their definitions of "Systems of Time" at: * <blockquote><pre> *     <a href=http://tycho.usno.navy.mil/systime.html>http://tycho.usno.navy.mil/systime.html</a> * </pre></blockquote> * <p> * In all methods of class <code>Date</code> that accept or return  * year, month, date, hours, minutes, and seconds values, the  * following representations are used:  * <ul> * <li>A year <i>y</i> is represented by the integer  *     <i>y</i>&nbsp;<code>-&nbsp;1900</code>.  * <li>A month is represented by an integer from 0 to 11; 0 is January,  *     1 is February, and so forth; thus 11 is December.  * <li>A date (day of month) is represented by an integer from 1 to 31  *     in the usual manner.  * <li>An hour is represented by an integer from 0 to 23. Thus, the hour  *     from midnight to 1 a.m. is hour 0, and the hour from noon to 1  *     p.m. is hour 12.  * <li>A minute is represented by an integer from 0 to 59 in the usual manner. * <li>A second is represented by an integer from 0 to 61; the values 60 and  *     61 occur only for leap seconds and even then only in Java  *     implementations that actually track leap seconds correctly. Because  *     of the manner in which leap seconds are currently introduced, it is  *     extremely unlikely that two leap seconds will occur in the same  *     minute, but this specification follows the date and time conventions  *     for ISO C. * </ul> * <p> * In all cases, arguments given to methods for these purposes need  * not fall within the indicated ranges; for example, a date may be  * specified as January 32 and is interpreted as meaning February 1. * * @author  James Gosling * @author  Arthur van Hoff * @author  Alan Liu * @version 1.74, 01/23/03 * @see     java.text.DateFormat * @see     java.util.Calendar * @see     java.util.TimeZone * @since   JDK1.0 */public class Date implements java.io.Serializable, Cloneable, Comparable {    /* DEFAULT ZONE SYNCHRONIZATION: Part of the usage model of Date     * is that a Date object behaves like a Calendar object whose zone     * is the current default TimeZone.  As a result, we must be     * careful about keeping this phantom calendar in sync with the     * default TimeZone.  There are three class and instance variables     * to watch out for to achieve this.  (1)staticCal. Whenever this     * object is used, it must be reset to the default zone. This is a     * cheap operation which can be done directly (just a reference     * assignment), so we just do it every time. (2)simpleFormatter.     * Likewise, the DateFormat object we use to implement toString()     * must be reset to the current default zone before use.  Again,     * this is a cheap reference assignment. (3)cal. This is a little     * more tricky.  Unlike the other cached static objects, cal has     * state, and we don't want to monkey with it willy-nilly.  The     * correct procedure is to change the zone in a way that doesn't     * alter the time of this object.  This means getting the millis     * (forcing a fields->time conversion), setting the zone, and then     * restoring the millis.  The zone must be set before restoring     * the millis.  Since this is an expensive operation, we only do     * this when we have to. - liu 1.2b4 */    /* If cal is null, then fastTime indicates the time in millis.     * Otherwise, fastTime is ignored, and cal indicates the time.     * The cal object is only created if a setXxx call is made to     * set a field.  For other operations, staticCal is used instead.     */    private transient Calendar cal;    private transient long fastTime;    private static Calendar staticCal = null;    private static Calendar utcCal = null;    private static int defaultCenturyStart = 0;    /* use serialVersionUID from modified java.util.Date for     * interoperability with JDK1.1. The Date was modified to write     * and read only the UTC time.     */    private static final long serialVersionUID = 7523967970034938905L;    /**     * Caches for the DateFormatters used by various toString methods.     */    private static SoftReference simpleFormatter = null;    private static SoftReference gmtFormatter = null;        /**     * Allocates a <code>Date</code> object and initializes it so that      * it represents the time at which it was allocated, measured to the      * nearest millisecond.      *     * @see     java.lang.System#currentTimeMillis()     */    public Date() {        this(System.currentTimeMillis());    }    /**     * Allocates a <code>Date</code> object and initializes it to      * represent the specified number of milliseconds since the      * standard base time known as "the epoch", namely January 1,      * 1970, 00:00:00 GMT.      *     * @param   date   the milliseconds since January 1, 1970, 00:00:00 GMT.     * @see     java.lang.System#currentTimeMillis()     */    public Date(long date) {        cal = null;        fastTime = date;    }    /**     * Allocates a <code>Date</code> object and initializes it so that      * it represents midnight, local time, at the beginning of the day      * specified by the <code>year</code>, <code>month</code>, and      * <code>date</code> arguments.      *     * @param   year    the year minus 1900.     * @param   month   the month between 0-11.     * @param   date    the day of the month between 1-31.     * @see     java.util.Calendar     * @deprecated As of JDK version 1.1,     * replaced by <code>Calendar.set(year + 1900, month, date)</code>     * or <code>GregorianCalendar(year + 1900, month, date)</code>.     */    public Date(int year, int month, int date) {        this(year, month, date, 0, 0, 0);    }    /**     * Allocates a <code>Date</code> object and initializes it so that      * it represents the instant at the start of the minute specified by      * the <code>year</code>, <code>month</code>, <code>date</code>,      * <code>hrs</code>, and <code>min</code> arguments, in the local      * time zone.      *     * @param   year    the year minus 1900.     * @param   month   the month between 0-11.     * @param   date    the day of the month between 1-31.     * @param   hrs     the hours between 0-23.     * @param   min     the minutes between 0-59.     * @see     java.util.Calendar     * @deprecated As of JDK version 1.1,     * replaced by <code>Calendar.set(year + 1900, month, date,     * hrs, min)</code> or <code>GregorianCalendar(year + 1900,     * month, date, hrs, min)</code>.     */    public Date(int year, int month, int date, int hrs, int min) {        this(year, month, date, hrs, min, 0);    }    /**     * Allocates a <code>Date</code> object and initializes it so that      * it represents the instant at the start of the second specified      * by the <code>year</code>, <code>month</code>, <code>date</code>,      * <code>hrs</code>, <code>min</code>, and <code>sec</code> arguments,      * in the local time zone.      *     * @param   year    the year minus 1900.     * @param   month   the month between 0-11.     * @param   date    the day of the month between 1-31.     * @param   hrs     the hours between 0-23.     * @param   min     the minutes between 0-59.     * @param   sec     the seconds between 0-59.     * @see     java.util.Calendar     * @deprecated As of JDK version 1.1,     * replaced by <code>Calendar.set(year + 1900, month, date,     * hrs, min, sec)</code> or <code>GregorianCalendar(year + 1900,     * month, date, hrs, min, sec)</code>.     */    public Date(int year, int month, int date, int hrs, int min, int sec) {        cal = null;        if (staticCal == null)            makeStaticCalendars();        synchronized (staticCal) {            staticCal.setTimeZone(TimeZone.getDefault());            staticCal.clear();            staticCal.set(year + 1900, month, date, hrs, min, sec);            fastTime = staticCal.getTimeInMillis();        }    }    /**     * Allocates a <code>Date</code> object and initializes it so that      * it represents the date and time indicated by the string      * <code>s</code>, which is interpreted as if by the      * {@link Date#parse} method.      *     * @param   s   a string representation of the date.     * @see     java.text.DateFormat     * @see     java.util.Date#parse(java.lang.String)     * @deprecated As of JDK version 1.1,     * replaced by <code>DateFormat.parse(String s)</code>.     */    public Date(String s) {        this(parse(s));    }    /**     * Return a copy of this object.     */    public Object clone() {        Date d = null;        try {            d = (Date)super.clone();            if (d.cal != null) d.cal = (Calendar)d.cal.clone();        } catch (CloneNotSupportedException e) {} // Won't happen        return d;    }        /**     * Determines the date and time based on the arguments. The      * arguments are interpreted as a year, month, day of the month,      * hour of the day, minute within the hour, and second within the      * minute, exactly as for the <tt>Date</tt> constructor with six      * arguments, except that the arguments are interpreted relative      * to UTC rather than to the local time zone. The time indicated is      * returned represented as the distance, measured in milliseconds,      * of that time from the epoch (00:00:00 GMT on January 1, 1970).     *     * @param   year    the year minus 1900.     * @param   month   the month between 0-11.     * @param   date    the day of the month between 1-31.     * @param   hrs     the hours between 0-23.     * @param   min     the minutes between 0-59.     * @param   sec     the seconds between 0-59.     * @return  the number of milliseconds since January 1, 1970, 00:00:00 GMT for     *          the date and time specified by the arguments.      * @see     java.util.Calendar     * @deprecated As of JDK version 1.1,

⌨️ 快捷键说明

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