/*
*
*
* Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
package java.util;
/**
* The class Date represents a specific instant in time, with millisecond
* precision.
* <p>
* This class has been subset for the J2ME based on the JDK 1.3 Date class.
* Many methods and variables have been pruned, and other methods
* simplified, in an effort to reduce the size of this class.
* <p>
* Although the Date 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 day = 24x60x60 = 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.
*
* @see java.util.TimeZone
* @see java.util.Calendar
* @version CLDC 1.1 03/13/2002 (Based on JDK 1.3)
*/
public class Date {
/* If calendar is null, then fastTime indicates the time in millis.
* Otherwise, fastTime is ignored, and calendar indicates the time.
*/
private Calendar calendar;
private long fastTime;
/**
* Allocates a <code>Date</code> object and initializes it to
* represent the current time specified number of milliseconds since the
* standard base time known as "the epoch", namely January 1,
* 1970, 00:00:00 GMT.
* @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) {
calendar = Calendar.getInstance();
if (calendar != null) {
calendar.setTimeInMillis(date);
}
fastTime = date;
}
/**
* Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
* represented by this <tt>Date</tt> object.
*
* @return the number of milliseconds since January 1, 1970, 00:00:00 GMT
* represented by this date.
*
* @see #setTime
*/
public long getTime() {
if (calendar != null) {
return calendar.getTimeInMillis();
} else {
return fastTime;
}
}
/**
* Sets this <tt>Date</tt> object to represent a point in time that is
* <tt>time</tt> milliseconds after January 1, 1970 00:00:00 GMT.
*
* @param time the number of milliseconds.
*
* @see #getTime
*/
public void setTime(long time) {
if (calendar != null) {
calendar.setTimeInMillis(time);
}
fastTime = time;
}
/**
* Compares two dates for equality.
* The result is <code>true</code> if and only if the argument is
* not <code>null</code> and is a <code>Date</code> object that
* represents the same point in time, to the millisecond, as this object.
* <p>
* Thus, two <code>Date</code> objects are equal if and only if the
* <code>getTime</code> method returns the same <code>long</code>
* value for both.
*
* @param obj the object to compare with.
* @return <code>true</code> if the objects are the same;
* <code>false</code> otherwise.
* @see java.util.Date#getTime()
*/
public boolean equals(Object obj) {
return obj != null && obj instanceof Date && getTime() == ((Date) obj).getTime();
}
/**
* Returns a hash code value for this object. The result is the
* exclusive OR of the two halves of the primitive <tt>long</tt>
* value returned by the {@link Date#getTime}
* method. That is, the hash code is the value of the expression:
* <blockquote><pre>
* (int)(this.getTime()^(this.getTime() >>> 32))</pre></blockquote>
*
* @return a hash code value for this object.
*/
public int hashCode() {
long ht = getTime();
return (int)ht ^ (int)(ht >> 32);
}
/**
* Converts this <code>Date</code> object to a <code>String</code>
* of the form:
* <blockquote><pre>
* dow mon dd hh:mm:ss zzz yyyy</pre></blockquote>
* where:<ul>
* <li><tt>dow</tt> is the day of the week (<tt>Sun, Mon, Tue, Wed,
* Thu, Fri, Sat</tt>).
* <li><tt>mon</tt> is the month (<tt>Jan, Feb, Mar, Apr, May, Jun,
* Jul, Aug, Sep, Oct, Nov, Dec</tt>).
* <li><tt>dd</tt> is the day of the month (<tt>01</tt> through
* <tt>31</tt>), as two decimal digits.
* <li><tt>hh</tt> is the hour of the day (<tt>00</tt> through
* <tt>23</tt>), as two decimal digits.
* <li><tt>mm</tt> is the minute within the hour (<tt>00</tt> through
* <tt>59</tt>), as two decimal digits.
* <li><tt>ss</tt> is the second within the minute (<tt>00</tt> through
* <tt>61</tt>, as two decimal digits.
* <li><tt>zzz</tt> is the time zone (and may reflect daylight savings
* time). If time zone information is not available,
* then <tt>zzz</tt> is empty - that is, it consists
* of no characters at all.
* <li><tt>yyyy</tt> is the year, as four decimal digits.
* </ul>
*
* @return a string representation of this date.
* @since CLDC 1.1
*/
public String toString() {
return com.sun.cldc.util.j2me.CalendarImpl.toString(calendar);
}
}
|