151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 22c87ad3a45cecf9e344487cad1abfdebe79f2c7cNarayan Kamath * Copyright (C) 2014 The Android Open Source Project 32485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage java.util; 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.text.DateFormat; 302485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thiererimport java.time.LocalDate; 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.IOException; 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.ObjectOutputStream; 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.ObjectInputStream; 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.lang.ref.SoftReference; 352485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thiererimport java.time.Instant; 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.util.calendar.BaseCalendar; 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.util.calendar.CalendarDate; 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.util.calendar.CalendarSystem; 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.util.calendar.CalendarUtils; 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.util.calendar.Era; 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.util.calendar.Gregorian; 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The class <code>Date</code> represents a specific instant 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in time, with millisecond precision. 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prior to JDK 1.1, the class <code>Date</code> had two additional 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * functions. It allowed the interpretation of dates as year, month, day, hour, 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * minute, and second values. It also allowed the formatting and parsing 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of date strings. Unfortunately, the API for these functions was not 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * amenable to internationalization. As of JDK 1.1, the 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>Calendar</code> class should be used to convert between dates and time 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * fields and the <code>DateFormat</code> class should be used to format and 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parse date strings. 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The corresponding methods in <code>Date</code> are deprecated. 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Although the <code>Date</code> class is intended to reflect 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * coordinated universal time (UTC), it may not do so exactly, 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * depending on the host environment of the Java Virtual Machine. 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Nearly all modern operating systems assume that 1 day = 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24 × 60 × 60 = 86400 seconds 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in all cases. In UTC, however, about once every year or two there 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is an extra second, called a "leap second." The leap 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * second is always added as the last second of the day, and always 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * on December 31 or June 30. For example, the last minute of the 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * year 1995 was 61 seconds long, thanks to an added leap second. 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Most computer clocks are not accurate enough to be able to reflect 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the leap-second distinction. 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Some computer standards are defined in terms of Greenwich mean 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * time (GMT), which is equivalent to universal time (UT). GMT is 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the "civil" name for the standard; UT is the 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * "scientific" name for the same standard. The 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * distinction between UTC and UT is that UTC is based on an atomic 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * clock and UT is based on astronomical observations, which for all 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * practical purposes is an invisibly fine hair to split. Because the 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * earth's rotation is not uniform (it slows down and speeds up 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in complicated ways), UT does not always flow uniformly. Leap 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * seconds are introduced as needed into UTC so as to keep UTC within 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 0.9 seconds of UT1, which is a version of UT with certain 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * corrections applied. There are other time and date systems as 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * well; for example, the time scale used by the satellite-based 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * global positioning system (GPS) is synchronized to UTC but is 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <i>not</i> adjusted for leap seconds. An interesting source of 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * further information is the U.S. Naval Observatory, particularly 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the Directorate of Time at: 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <a href=http://tycho.usno.navy.mil>http://tycho.usno.navy.mil</a> 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </pre></blockquote> 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and their definitions of "Systems of Time" at: 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <a href=http://tycho.usno.navy.mil/systime.html>http://tycho.usno.navy.mil/systime.html</a> 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </pre></blockquote> 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * In all methods of class <code>Date</code> that accept or return 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * year, month, date, hours, minutes, and seconds values, the 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * following representations are used: 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <ul> 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A year <i>y</i> is represented by the integer 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <i>y</i> <code>- 1900</code>. 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A month is represented by an integer from 0 to 11; 0 is January, 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1 is February, and so forth; thus 11 is December. 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A date (day of month) is represented by an integer from 1 to 31 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in the usual manner. 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>An hour is represented by an integer from 0 to 23. Thus, the hour 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * from midnight to 1 a.m. is hour 0, and the hour from noon to 1 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * p.m. is hour 12. 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A minute is represented by an integer from 0 to 59 in the usual manner. 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A second is represented by an integer from 0 to 61; the values 60 and 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 61 occur only for leap seconds and even then only in Java 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementations that actually track leap seconds correctly. Because 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of the manner in which leap seconds are currently introduced, it is 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * extremely unlikely that two leap seconds will occur in the same 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * minute, but this specification follows the date and time conventions 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for ISO C. 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </ul> 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * In all cases, arguments given to methods for these purposes need 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * not fall within the indicated ranges; for example, a date may be 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified as January 32 and is interpreted as meaning February 1. 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author James Gosling 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Arthur van Hoff 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Alan Liu 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.DateFormat 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.TimeZone 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.0 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class Date 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski implements java.io.Serializable, Cloneable, Comparable<Date> 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static final BaseCalendar gcal = 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarSystem.getGregorianCalendar(); 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static BaseCalendar jcal; 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private transient long fastTime; 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If cdate is null, then fastTime indicates the time in millis. 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If cdate.isNormalized() is true, then fastTime and cdate are in 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * synch. Otherwise, fastTime is ignored, and cdate indicates the 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * time. 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private transient BaseCalendar.Date cdate; 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Initialized just before the value is used. See parse(). 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static int defaultCenturyStart; 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* use serialVersionUID from modified java.util.Date for 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * interoperability with JDK1.1. The Date was modified to write 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and read only the UTC time. 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static final long serialVersionUID = 7523967970034938905L; 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Allocates a <code>Date</code> object and initializes it so that 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it represents the time at which it was allocated, measured to the 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * nearest millisecond. 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.System#currentTimeMillis() 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date() { 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(System.currentTimeMillis()); 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Allocates a <code>Date</code> object and initializes it to 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represent the specified number of milliseconds since the 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * standard base time known as "the epoch", namely January 1, 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1970, 00:00:00 GMT. 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param date the milliseconds since January 1, 1970, 00:00:00 GMT. 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.System#currentTimeMillis() 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date(long date) { 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski fastTime = date; 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Allocates a <code>Date</code> object and initializes it so that 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it represents midnight, local time, at the beginning of the day 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified by the <code>year</code>, <code>month</code>, and 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>date</code> arguments. 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param year the year minus 1900. 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param month the month between 0-11. 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param date the day of the month between 1-31. 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(year + 1900, month, date)</code> 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or <code>GregorianCalendar(year + 1900, month, date)</code>. 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date(int year, int month, int date) { 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(year, month, date, 0, 0, 0); 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Allocates a <code>Date</code> object and initializes it so that 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it represents the instant at the start of the minute specified by 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the <code>year</code>, <code>month</code>, <code>date</code>, 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>hrs</code>, and <code>min</code> arguments, in the local 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * time zone. 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param year the year minus 1900. 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param month the month between 0-11. 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param date the day of the month between 1-31. 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param hrs the hours between 0-23. 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param min the minutes between 0-59. 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(year + 1900, month, date, 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * hrs, min)</code> or <code>GregorianCalendar(year + 1900, 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * month, date, hrs, min)</code>. 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date(int year, int month, int date, int hrs, int min) { 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(year, month, date, hrs, min, 0); 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Allocates a <code>Date</code> object and initializes it so that 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it represents the instant at the start of the second specified 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by the <code>year</code>, <code>month</code>, <code>date</code>, 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>hrs</code>, <code>min</code>, and <code>sec</code> arguments, 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in the local time zone. 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param year the year minus 1900. 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param month the month between 0-11. 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param date the day of the month between 1-31. 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param hrs the hours between 0-23. 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param min the minutes between 0-59. 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param sec the seconds between 0-59. 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(year + 1900, month, date, 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * hrs, min, sec)</code> or <code>GregorianCalendar(year + 1900, 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * month, date, hrs, min, sec)</code>. 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date(int year, int month, int date, int hrs, int min, int sec) { 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int y = year + 1900; 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // month is 0-based. So we have to normalize month to support Long.MAX_VALUE. 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (month >= 12) { 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski y += month / 12; 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski month %= 12; 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (month < 0) { 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski y += CalendarUtils.floorDivide(month, 12); 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski month = CalendarUtils.mod(month, 12); 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(y); 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef()); 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate.setNormalizedDate(y, month + 1, date).setTimeOfDay(hrs, min, sec, 0); 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski getTimeImpl(); 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate = null; 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Allocates a <code>Date</code> object and initializes it so that 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it represents the date and time indicated by the string 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>s</code>, which is interpreted as if by the 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@link Date#parse} method. 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param s a string representation of the date. 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.DateFormat 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#parse(java.lang.String) 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>DateFormat.parse(String s)</code>. 27151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date(String s) { 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(parse(s)); 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return a copy of this object. 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Object clone() { 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Date d = null; 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski d = (Date)super.clone(); 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cdate != null) { 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski d.cdate = (BaseCalendar.Date) cdate.clone(); 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (CloneNotSupportedException e) {} // Won't happen 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return d; 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines the date and time based on the arguments. The 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * arguments are interpreted as a year, month, day of the month, 29451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * hour of the day, minute within the hour, and second within the 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * minute, exactly as for the <tt>Date</tt> constructor with six 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * arguments, except that the arguments are interpreted relative 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to UTC rather than to the local time zone. The time indicated is 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * returned represented as the distance, measured in milliseconds, 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of that time from the epoch (00:00:00 GMT on January 1, 1970). 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param year the year minus 1900. 30251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param month the month between 0-11. 30351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param date the day of the month between 1-31. 30451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param hrs the hours between 0-23. 30551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param min the minutes between 0-59. 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param sec the seconds between 0-59. 30751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT for 30851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the date and time specified by the arguments. 30951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(year + 1900, month, date, 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * hrs, min, sec)</code> or <code>GregorianCalendar(year + 1900, 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * month, date, hrs, min, sec)</code>, using a UTC 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>TimeZone</code>, followed by <code>Calendar.getTime().getTime()</code>. 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static long UTC(int year, int month, int date, 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int hrs, int min, int sec) { 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int y = year + 1900; 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // month is 0-based. So we have to normalize month to support Long.MAX_VALUE. 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (month >= 12) { 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski y += month / 12; 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski month %= 12; 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (month < 0) { 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski y += CalendarUtils.floorDivide(month, 12); 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski month = CalendarUtils.mod(month, 12); 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int m = month + 1; 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(y); 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date udate = (BaseCalendar.Date) cal.newCalendarDate(null); 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski udate.setNormalizedDate(y, m, date).setTimeOfDay(hrs, min, sec, 0); 33251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 33351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Use a Date instance to perform normalization. Its fastTime 33451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // is the UTC value after the normalization. 33551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Date d = new Date(0); 33651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski d.normalize(udate); 33751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return d.fastTime; 33851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 34151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Attempts to interpret the string <tt>s</tt> as a representation 34251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of a date and time. If the attempt is successful, the time 34351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * indicated is returned represented as the distance, measured in 34451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * milliseconds, of that time from the epoch (00:00:00 GMT on 34551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * January 1, 1970). If the attempt fails, an 34651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>IllegalArgumentException</tt> is thrown. 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * It accepts many syntaxes; in particular, it recognizes the IETF 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * standard date syntax: "Sat, 12 Aug 1995 13:30:00 GMT". It also 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * understands the continental U.S. time-zone abbreviations, but for 35151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * general use, a time-zone offset should be used: "Sat, 12 Aug 1995 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 13:30:00 GMT+0430" (4 hours, 30 minutes west of the Greenwich 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * meridian). If no time zone is specified, the local time zone is 35451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * assumed. GMT and UTC are considered equivalent. 35551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 35651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The string <tt>s</tt> is processed from left to right, looking for 35751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * data of interest. Any material in <tt>s</tt> that is within the 35851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ASCII parenthesis characters <tt>(</tt> and <tt>)</tt> is ignored. 35951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Parentheses may be nested. Otherwise, the only characters permitted 36051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * within <tt>s</tt> are these ASCII characters: 36151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 36251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * abcdefghijklmnopqrstuvwxyz 36351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ABCDEFGHIJKLMNOPQRSTUVWXYZ 36451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 0123456789,+-:/</pre></blockquote> 36551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and whitespace characters.<p> 36651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A consecutive sequence of decimal digits is treated as a decimal 36751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * number:<ul> 36851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>If a number is preceded by <tt>+</tt> or <tt>-</tt> and a year 36951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * has already been recognized, then the number is a time-zone 37051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * offset. If the number is less than 24, it is an offset measured 37151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in hours. Otherwise, it is regarded as an offset in minutes, 37251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * expressed in 24-hour time format without punctuation. A 37351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * preceding <tt>-</tt> means a westward offset. Time zone offsets 37451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are always relative to UTC (Greenwich). Thus, for example, 37551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>-5</tt> occurring in the string would mean "five hours west 37651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of Greenwich" and <tt>+0430</tt> would mean "four hours and 37751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * thirty minutes east of Greenwich." It is permitted for the 37851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string to specify <tt>GMT</tt>, <tt>UT</tt>, or <tt>UTC</tt> 37951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * redundantly-for example, <tt>GMT-5</tt> or <tt>utc+0430</tt>. 38051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>The number is regarded as a year number if one of the 38151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * following conditions is true: 38251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <ul> 38351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>The number is equal to or greater than 70 and followed by a 38451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * space, comma, slash, or end of string 38551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>The number is less than 70, and both a month and a day of 38651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the month have already been recognized</li> 38751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </ul> 38851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the recognized year number is less than 100, it is 38951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * interpreted as an abbreviated year relative to a century of 39051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * which dates are within 80 years before and 19 years after 39151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the time when the Date class is initialized. 39251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * After adjusting the year number, 1900 is subtracted from 39351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it. For example, if the current year is 1999 then years in 39451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the range 19 to 99 are assumed to mean 1919 to 1999, while 39551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * years from 0 to 18 are assumed to mean 2000 to 2018. Note 39651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * that this is slightly different from the interpretation of 39751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * years less than 100 that is used in {@link java.text.SimpleDateFormat}. 39851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>If the number is followed by a colon, it is regarded as an hour, 39951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * unless an hour has already been recognized, in which case it is 40051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * regarded as a minute. 40151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>If the number is followed by a slash, it is regarded as a month 40251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * (it is decreased by 1 to produce a number in the range <tt>0</tt> 40351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to <tt>11</tt>), unless a month has already been recognized, in 40451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * which case it is regarded as a day of the month. 40551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>If the number is followed by whitespace, a comma, a hyphen, or 40651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * end of string, then if an hour has been recognized but not a 40751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * minute, it is regarded as a minute; otherwise, if a minute has 40851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * been recognized but not a second, it is regarded as a second; 40951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * otherwise, it is regarded as a day of the month. </ul><p> 41051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A consecutive sequence of letters is regarded as a word and treated 41151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as follows:<ul> 41251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A word that matches <tt>AM</tt>, ignoring case, is ignored (but 41351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the parse fails if an hour has not been recognized or is less 41451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * than <tt>1</tt> or greater than <tt>12</tt>). 41551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>A word that matches <tt>PM</tt>, ignoring case, adds <tt>12</tt> 41651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to the hour (but the parse fails if an hour has not been 41751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * recognized or is less than <tt>1</tt> or greater than <tt>12</tt>). 41851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>Any word that matches any prefix of <tt>SUNDAY, MONDAY, TUESDAY, 41951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * WEDNESDAY, THURSDAY, FRIDAY</tt>, or <tt>SATURDAY</tt>, ignoring 42051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * case, is ignored. For example, <tt>sat, Friday, TUE</tt>, and 42151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>Thurs</tt> are ignored. 42251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>Otherwise, any word that matches any prefix of <tt>JANUARY, 42351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, 42451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * OCTOBER, NOVEMBER</tt>, or <tt>DECEMBER</tt>, ignoring case, and 42551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * considering them in the order given here, is recognized as 42651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specifying a month and is converted to a number (<tt>0</tt> to 42751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>11</tt>). For example, <tt>aug, Sept, april</tt>, and 42851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>NOV</tt> are recognized as months. So is <tt>Ma</tt>, which 42951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is recognized as <tt>MARCH</tt>, not <tt>MAY</tt>. 43051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>Any word that matches <tt>GMT, UT</tt>, or <tt>UTC</tt>, ignoring 43151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * case, is treated as referring to UTC. 43251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li>Any word that matches <tt>EST, CST, MST</tt>, or <tt>PST</tt>, 43351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ignoring case, is recognized as referring to the time zone in 43451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * North America that is five, six, seven, or eight hours west of 43551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Greenwich, respectively. Any word that matches <tt>EDT, CDT, 43651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * MDT</tt>, or <tt>PDT</tt>, ignoring case, is recognized as 43751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * referring to the same time zone, respectively, during daylight 43851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * saving time.</ul><p> 43951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Once the entire string s has been scanned, it is converted to a time 44051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * result in one of two ways. If a time zone or time-zone offset has been 44151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * recognized, then the year, month, day of month, hour, minute, and 44251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * second are interpreted in UTC and then the time-zone offset is 44351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * applied. Otherwise, the year, month, day of month, hour, minute, and 44451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * second are interpreted in the local time zone. 44551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 44651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param s a string to be parsed as a date. 44751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT 44851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represented by the string argument. 44951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.DateFormat 45051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 45151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>DateFormat.parse(String s)</code>. 45251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 45351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 45451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static long parse(String s) { 45551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int year = Integer.MIN_VALUE; 45651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int mon = -1; 45751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int mday = -1; 45851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int hour = -1; 45951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int min = -1; 46051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int sec = -1; 46151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int millis = -1; 46251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int c = -1; 46351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int i = 0; 46451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int n = -1; 46551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int wst = -1; 46651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int tzoffset = -1; 46751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int prevc = 0; 46851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski syntax: 46951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 47051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (s == null) 47151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 47251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int limit = s.length(); 47351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski while (i < limit) { 47451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski c = s.charAt(i); 47551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski i++; 47651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (c <= ' ' || c == ',') 47751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski continue; 47851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (c == '(') { // skip comments 47951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int depth = 1; 48051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski while (i < limit) { 48151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski c = s.charAt(i); 48251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski i++; 48351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (c == '(') depth++; 48451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (c == ')') 48551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (--depth <= 0) 48651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 48751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 48851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski continue; 48951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 49051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if ('0' <= c && c <= '9') { 49151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski n = c - '0'; 49251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski while (i < limit && '0' <= (c = s.charAt(i)) && c <= '9') { 4932485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer n = n * 10 + c - '0'; 49451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski i++; 49551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 49651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (prevc == '+' || prevc == '-' && year != Integer.MIN_VALUE) { 4976975f84c2ed72e1e26d20190b6f318718c849008Tobias Thierer // BEGIN Android-changed: Android specific time zone logic 4982485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer 499fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath if (tzoffset != 0 && tzoffset != -1) 500fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath break syntax; 501fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath 50251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // timezone offset 503fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath if (n < 24) { 50451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski n = n * 60; // EG. "GMT-3" 505fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath 506fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath // Support for Timezones of the form GMT-3:30. We look for an ':" and 507fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath // parse the number following it as loosely as the original hours 508fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath // section (i.e, no range or validity checks). 509fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath int minutesPart = 0; 510fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath if (i < limit && (s.charAt(i) == ':')) { 511fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath i++; 512fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath while (i < limit && '0' <= (c = s.charAt(i)) && c <= '9') { 513fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath minutesPart = (minutesPart * 10) + (c - '0'); 514fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath i++; 515fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath } 516fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath } 517fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath 518fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath n += minutesPart; 519fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath } else { 520fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath n = (n % 100) + ((n / 100) * 60); // eg "GMT-0430" 521fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath } 522fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath 52351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (prevc == '+') // plus means east of GMT 52451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski n = -n; 525aa3cc81fcb0d35faa9a51d6bf59d48685fd4d16aTobias Thierer // END Android-changed: Android specific time zone logic 526fa9818c081c1c0158d80ddd9b1f92990b3e0eb30Narayan Kamath 52751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski tzoffset = n; 52851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (n >= 70) 52951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (year != Integer.MIN_VALUE) 53051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 53151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (c <= ' ' || c == ',' || c == '/' || i >= limit) 53251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // year = n < 1900 ? n : n - 1900; 53351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski year = n; 53451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else 53551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 53651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (c == ':') 53751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (hour < 0) 53851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski hour = (byte) n; 53951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (min < 0) 54051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski min = (byte) n; 54151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else 54251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 54351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (c == '/') 54451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (mon < 0) 54551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski mon = (byte) (n - 1); 54651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (mday < 0) 54751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski mday = (byte) n; 54851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else 54951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 55051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (i < limit && c != ',' && c > ' ' && c != '-') 55151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 55251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (hour >= 0 && min < 0) 55351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski min = (byte) n; 55451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (min >= 0 && sec < 0) 55551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sec = (byte) n; 55651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (mday < 0) 55751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski mday = (byte) n; 55851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Handle two-digit years < 70 (70-99 handled above). 55951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (year == Integer.MIN_VALUE && mon >= 0 && mday >= 0) 56051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski year = n; 56151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else 56251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 56351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski prevc = 0; 56451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (c == '/' || c == ':' || c == '+' || c == '-') 56551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski prevc = c; 56651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else { 56751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int st = i - 1; 56851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski while (i < limit) { 56951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski c = s.charAt(i); 57051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (!('A' <= c && c <= 'Z' || 'a' <= c && c <= 'z')) 57151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 57251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski i++; 57351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 57451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (i <= st + 1) 57551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 57651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int k; 57751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski for (k = wtb.length; --k >= 0;) 57851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (wtb[k].regionMatches(true, 0, s, st, i - st)) { 57951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int action = ttb[k]; 58051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (action != 0) { 58151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (action == 1) { // pm 58251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (hour > 12 || hour < 1) 58351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 58451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (hour < 12) 58551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski hour += 12; 58651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (action == 14) { // am 58751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (hour > 12 || hour < 1) 58851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 58951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else if (hour == 12) 59051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski hour = 0; 59151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (action <= 13) { // month! 59251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (mon < 0) 59351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski mon = (byte) (action - 2); 59451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else 59551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 59651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 59751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski tzoffset = action - 10000; 59851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 59951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 60051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 60151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 60251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (k < 0) 60351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 60451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski prevc = 0; 60551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 60651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 60751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (year == Integer.MIN_VALUE || mon < 0 || mday < 0) 60851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break syntax; 60951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Parse 2-digit years within the correct default century. 61051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (year < 100) { 61151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (Date.class) { 61251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (defaultCenturyStart == 0) { 61351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski defaultCenturyStart = gcal.getCalendarDate().getYear() - 80; 61451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 61551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 61651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski year += (defaultCenturyStart / 100) * 100; 61751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (year < defaultCenturyStart) year += 100; 61851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 61951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (sec < 0) 62051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sec = 0; 62151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (min < 0) 62251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski min = 0; 62351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (hour < 0) 62451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski hour = 0; 62551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(year); 62651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (tzoffset == -1) { // no time zone specified, have to use local 62751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date ldate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef()); 62851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ldate.setDate(year, mon + 1, mday); 62951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ldate.setTimeOfDay(hour, min, sec, 0); 63051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return cal.getTime(ldate); 63151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 63251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date udate = (BaseCalendar.Date) cal.newCalendarDate(null); // no time zone 63351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski udate.setDate(year, mon + 1, mday); 63451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski udate.setTimeOfDay(hour, min, sec, 0); 63551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return cal.getTime(udate) + tzoffset * (60 * 1000); 63651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 63751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // syntax error 63851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException(); 63951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 64051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final static String wtb[] = { 64151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "am", "pm", 64251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "monday", "tuesday", "wednesday", "thursday", "friday", 64351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "saturday", "sunday", 64451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "january", "february", "march", "april", "may", "june", 64551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "july", "august", "september", "october", "november", "december", 64651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "gmt", "ut", "utc", "est", "edt", "cst", "cdt", 64751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "mst", "mdt", "pst", "pdt" 64851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski }; 64951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final static int ttb[] = { 65051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14, 1, 0, 0, 0, 0, 0, 0, 0, 65151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 65251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10000 + 0, 10000 + 0, 10000 + 0, // GMT/UT/UTC 65351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10000 + 5 * 60, 10000 + 4 * 60, // EST/EDT 65451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10000 + 6 * 60, 10000 + 5 * 60, // CST/CDT 65551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10000 + 7 * 60, 10000 + 6 * 60, // MST/MDT 65651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10000 + 8 * 60, 10000 + 7 * 60 // PST/PDT 65751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski }; 65851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 65951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 66051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a value that is the result of subtracting 1900 from the 66151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * year that contains or begins with the instant in time represented 66251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by this <code>Date</code> object, as interpreted in the local 66351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * time zone. 66451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 66551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the year represented by this date, minus 1900. 66651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 66751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 66851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.YEAR) - 1900</code>. 66951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 67051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 67151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getYear() { 67251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return normalize().getYear() - 1900; 67351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 67451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 67551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 67651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the year of this <tt>Date</tt> object to be the specified 67751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * value plus 1900. This <code>Date</code> object is modified so 67851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * that it represents a point in time within the specified year, 67951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * with the month, date, hour, minute, and second the same as 68051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * before, as interpreted in the local time zone. (Of course, if 68151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the date was February 29, for example, and the year is set to a 68251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * non-leap year, then the new date will be treated as if it were 68351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * on March 1.) 68451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 68551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param year the year value. 68651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 68751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 68851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(Calendar.YEAR, year + 1900)</code>. 68951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 69051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 69151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setYear(int year) { 69251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski getCalendarDate().setNormalizedYear(year + 1900); 69351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 69451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 69551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 69651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a number representing the month that contains or begins 69751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * with the instant in time represented by this <tt>Date</tt> object. 69851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The value returned is between <code>0</code> and <code>11</code>, 69951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * with the value <code>0</code> representing January. 70051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 70151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the month represented by this date. 70251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 70351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 70451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.MONTH)</code>. 70551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 70651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 70751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getMonth() { 70851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return normalize().getMonth() - 1; // adjust 1-based to 0-based 70951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 71051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 71151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 71251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the month of this date to the specified value. This 71351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>Date</tt> object is modified so that it represents a point 71451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in time within the specified month, with the year, date, hour, 71551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * minute, and second the same as before, as interpreted in the 71651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * local time zone. If the date was October 31, for example, and 71751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the month is set to June, then the new date will be treated as 71851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if it were on July 1, because June has only 30 days. 71951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 72051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param month the month value between 0-11. 72151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 72251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 72351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(Calendar.MONTH, int month)</code>. 72451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 72551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 72651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setMonth(int month) { 72751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int y = 0; 72851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (month >= 12) { 72951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski y = month / 12; 73051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski month %= 12; 73151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (month < 0) { 73251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski y = CalendarUtils.floorDivide(month, 12); 73351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski month = CalendarUtils.mod(month, 12); 73451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 73551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date d = getCalendarDate(); 73651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (y != 0) { 73751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski d.setNormalizedYear(d.getNormalizedYear() + y); 73851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 73951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski d.setMonth(month + 1); // adjust 0-based to 1-based month numbering 74051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 74151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 74251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 74351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the day of the month represented by this <tt>Date</tt> object. 74451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The value returned is between <code>1</code> and <code>31</code> 74551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * representing the day of the month that contains or begins with the 74651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * instant in time represented by this <tt>Date</tt> object, as 74751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * interpreted in the local time zone. 74851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 74951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the day of the month represented by this date. 75051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 75151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 75251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.DAY_OF_MONTH)</code>. 75351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 75451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 7556975f84c2ed72e1e26d20190b6f318718c849008Tobias Thierer // Android-removed stray @deprecated tag. 75651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getDate() { 75751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return normalize().getDayOfMonth(); 75851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 75951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 76051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 76151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the day of the month of this <tt>Date</tt> object to the 76251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified value. This <tt>Date</tt> object is modified so that 76351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it represents a point in time within the specified day of the 76451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * month, with the year, month, hour, minute, and second the same 76551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as before, as interpreted in the local time zone. If the date 76651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * was April 30, for example, and the date is set to 31, then it 76751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * will be treated as if it were on May 1, because April has only 76851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 30 days. 76951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 77051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param date the day of the month value between 1-31. 77151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 77251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 77351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(Calendar.DAY_OF_MONTH, int date)</code>. 77451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 77551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 77651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setDate(int date) { 77751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski getCalendarDate().setDayOfMonth(date); 77851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 77951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 78051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 78151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the day of the week represented by this date. The 78251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * returned value (<tt>0</tt> = Sunday, <tt>1</tt> = Monday, 78351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>2</tt> = Tuesday, <tt>3</tt> = Wednesday, <tt>4</tt> = 78451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Thursday, <tt>5</tt> = Friday, <tt>6</tt> = Saturday) 78551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represents the day of the week that contains or begins with 78651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the instant in time represented by this <tt>Date</tt> object, 78751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as interpreted in the local time zone. 78851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 78951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the day of the week represented by this date. 79051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 79151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 79251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.DAY_OF_WEEK)</code>. 79351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 79451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 79551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getDay() { 7962485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer return normalize().getDayOfWeek() - BaseCalendar.SUNDAY; 79751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 79851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 79951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 80051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the hour represented by this <tt>Date</tt> object. The 80151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * returned value is a number (<tt>0</tt> through <tt>23</tt>) 80251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * representing the hour within the day that contains or begins 80351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * with the instant in time represented by this <tt>Date</tt> 80451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * object, as interpreted in the local time zone. 80551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 80651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the hour represented by this date. 80751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 80851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 80951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.HOUR_OF_DAY)</code>. 81051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 81151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 81251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getHours() { 81351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return normalize().getHours(); 81451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 81551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 81651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 81751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the hour of this <tt>Date</tt> object to the specified value. 81851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This <tt>Date</tt> object is modified so that it represents a point 81951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in time within the specified hour of the day, with the year, month, 82051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * date, minute, and second the same as before, as interpreted in the 82151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * local time zone. 82251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 82351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param hours the hour value. 82451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 82551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 82651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(Calendar.HOUR_OF_DAY, int hours)</code>. 82751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 82851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 82951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setHours(int hours) { 83051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski getCalendarDate().setHours(hours); 83151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 83251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 83351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 83451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the number of minutes past the hour represented by this date, 83551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as interpreted in the local time zone. 83651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The value returned is between <code>0</code> and <code>59</code>. 83751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 83851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the number of minutes past the hour represented by this date. 83951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 84051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 84151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.MINUTE)</code>. 84251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 84351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 84451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getMinutes() { 84551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return normalize().getMinutes(); 84651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 84751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 84851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 84951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the minutes of this <tt>Date</tt> object to the specified value. 85051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This <tt>Date</tt> object is modified so that it represents a point 85151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in time within the specified minute of the hour, with the year, month, 85251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * date, hour, and second the same as before, as interpreted in the 85351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * local time zone. 85451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 85551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param minutes the value of the minutes. 85651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 85751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 85851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(Calendar.MINUTE, int minutes)</code>. 85951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 86051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 86151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setMinutes(int minutes) { 86251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski getCalendarDate().setMinutes(minutes); 86351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 86451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 86551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 86651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the number of seconds past the minute represented by this date. 86751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The value returned is between <code>0</code> and <code>61</code>. The 86851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * values <code>60</code> and <code>61</code> can only occur on those 86951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Virtual Machines that take leap seconds into account. 87051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 87151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the number of seconds past the minute represented by this date. 87251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 87351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 87451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.get(Calendar.SECOND)</code>. 87551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 87651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 87751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getSeconds() { 87851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return normalize().getSeconds(); 87951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 88051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 88151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 88251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the seconds of this <tt>Date</tt> to the specified value. 88351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This <tt>Date</tt> object is modified so that it represents a 88451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * point in time within the specified second of the minute, with 88551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the year, month, date, hour, and minute the same as before, as 88651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * interpreted in the local time zone. 88751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 88851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param seconds the seconds value. 88951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar 89051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 89151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>Calendar.set(Calendar.SECOND, int seconds)</code>. 89251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 89351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 89451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setSeconds(int seconds) { 89551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski getCalendarDate().setSeconds(seconds); 89651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 89751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 89851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 89951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT 90051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represented by this <tt>Date</tt> object. 90151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 90251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT 90351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represented by this date. 90451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 90551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public long getTime() { 90651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return getTimeImpl(); 90751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 90851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 90951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final long getTimeImpl() { 91051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cdate != null && !cdate.isNormalized()) { 91151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski normalize(); 91251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 91351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return fastTime; 91451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 91551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 91651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 91751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets this <code>Date</code> object to represent a point in time that is 91851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>time</code> milliseconds after January 1, 1970 00:00:00 GMT. 91951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 92051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param time the number of milliseconds. 92151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 92251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void setTime(long time) { 92351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski fastTime = time; 92451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate = null; 92551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 92651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 92751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 92851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Tests if this date is before the specified date. 92951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 93051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param when a date. 93151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if and only if the instant of time 93251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represented by this <tt>Date</tt> object is strictly 93351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * earlier than the instant represented by <tt>when</tt>; 93451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>false</code> otherwise. 93551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NullPointerException if <code>when</code> is null. 93651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 93751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean before(Date when) { 93851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return getMillisOf(this) < getMillisOf(when); 93951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 94051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 94151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 94251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Tests if this date is after the specified date. 94351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 94451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param when a date. 94551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if and only if the instant represented 94651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by this <tt>Date</tt> object is strictly later than the 94751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * instant represented by <tt>when</tt>; 94851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>false</code> otherwise. 94951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NullPointerException if <code>when</code> is null. 95051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 95151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean after(Date when) { 95251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return getMillisOf(this) > getMillisOf(when); 95351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 95451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 95551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 95651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Compares two dates for equality. 95751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The result is <code>true</code> if and only if the argument is 95851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * not <code>null</code> and is a <code>Date</code> object that 95951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * represents the same point in time, to the millisecond, as this object. 96051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 96151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Thus, two <code>Date</code> objects are equal if and only if the 96251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>getTime</code> method returns the same <code>long</code> 96351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * value for both. 96451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 96551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param obj the object to compare with. 96651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the objects are the same; 96751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>false</code> otherwise. 96851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#getTime() 96951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 97051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean equals(Object obj) { 97151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return obj instanceof Date && getTime() == ((Date) obj).getTime(); 97251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 97351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 97451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 97551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the millisecond value of this <code>Date</code> object 97651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * without affecting its internal state. 97751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 97851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski static final long getMillisOf(Date date) { 97951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (date.cdate == null || date.cdate.isNormalized()) { 98051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return date.fastTime; 98151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 98251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date d = (BaseCalendar.Date) date.cdate.clone(); 98351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return gcal.getTime(d); 98451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 98551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 98651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 98751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Compares two Dates for ordering. 98851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 98951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param anotherDate the <code>Date</code> to be compared. 99051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the value <code>0</code> if the argument Date is equal to 99151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this Date; a value less than <code>0</code> if this Date 99251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is before the Date argument; and a value greater than 99351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>0</code> if this Date is after the Date argument. 99451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 99551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NullPointerException if <code>anotherDate</code> is null. 99651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 99751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int compareTo(Date anotherDate) { 99851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski long thisTime = getMillisOf(this); 99951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski long anotherTime = getMillisOf(anotherDate); 100051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1)); 100151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 100251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 100351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 100451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a hash code value for this object. The result is the 100551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * exclusive OR of the two halves of the primitive <tt>long</tt> 100651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * value returned by the {@link Date#getTime} 100751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method. That is, the hash code is the value of the expression: 10082485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * <blockquote><pre>{@code 10092485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * (int)(this.getTime()^(this.getTime() >>> 32)) 10102485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * }</pre></blockquote> 101151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 101251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a hash code value for this object. 101351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 101451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int hashCode() { 101551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski long ht = this.getTime(); 101651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return (int) ht ^ (int) (ht >> 32); 101751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 101851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 101951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 102051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Converts this <code>Date</code> object to a <code>String</code> 102151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of the form: 102251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 102351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * dow mon dd hh:mm:ss zzz yyyy</pre></blockquote> 102451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * where:<ul> 102551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>dow</tt> is the day of the week (<tt>Sun, Mon, Tue, Wed, 102651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Thu, Fri, Sat</tt>). 102751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>mon</tt> is the month (<tt>Jan, Feb, Mar, Apr, May, Jun, 102851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Jul, Aug, Sep, Oct, Nov, Dec</tt>). 102951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>dd</tt> is the day of the month (<tt>01</tt> through 103051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>31</tt>), as two decimal digits. 103151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>hh</tt> is the hour of the day (<tt>00</tt> through 103251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>23</tt>), as two decimal digits. 103351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>mm</tt> is the minute within the hour (<tt>00</tt> through 103451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>59</tt>), as two decimal digits. 103551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>ss</tt> is the second within the minute (<tt>00</tt> through 103651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>61</tt>, as two decimal digits. 103751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>zzz</tt> is the time zone (and may reflect daylight saving 103851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * time). Standard time zone abbreviations include those 103951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * recognized by the method <tt>parse</tt>. If time zone 104051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * information is not available, then <tt>zzz</tt> is empty - 104151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * that is, it consists of no characters at all. 104251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><tt>yyyy</tt> is the year, as four decimal digits. 104351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </ul> 104451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 104551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a string representation of this date. 104651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#toLocaleString() 104751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#toGMTString() 104851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 104951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String toString() { 105051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // "EEE MMM dd HH:mm:ss zzz yyyy"; 105151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date date = normalize(); 105251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski StringBuilder sb = new StringBuilder(28); 105351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int index = date.getDayOfWeek(); 10542485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer if (index == BaseCalendar.SUNDAY) { 105551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski index = 8; 105651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 105751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski convertToAbbr(sb, wtb[index]).append(' '); // EEE 105851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM 105951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd 106051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 106151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH 106251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm 106351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss 106451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski TimeZone zi = date.getZone(); 106551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (zi != null) { 10662485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz 106751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 106851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sb.append("GMT"); 106951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 107051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sb.append(' ').append(date.getYear()); // yyyy 107151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return sb.toString(); 107251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 107351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 107451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 107551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Converts the given name to its 3-letter abbreviation (e.g., 107651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * "monday" -> "Mon") and stored the abbreviation in the given 107751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>StringBuilder</code>. 107851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 107951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static final StringBuilder convertToAbbr(StringBuilder sb, String name) { 108051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sb.append(Character.toUpperCase(name.charAt(0))); 108151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sb.append(name.charAt(1)).append(name.charAt(2)); 108251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return sb; 108351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 108451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 108551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 108651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a string representation of this <tt>Date</tt> object in an 108751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation-dependent form. The intent is that the form should 108851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * be familiar to the user of the Java application, wherever it may 108951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * happen to be running. The intent is comparable to that of the 109051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * "<code>%c</code>" format supported by the <code>strftime()</code> 109151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * function of ISO C. 109251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 109351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a string representation of this date, using the locale 109451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * conventions. 109551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.DateFormat 109651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#toString() 109751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#toGMTString() 109851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 109951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>DateFormat.format(Date date)</code>. 110051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 110151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 110251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String toLocaleString() { 110351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski DateFormat formatter = DateFormat.getDateTimeInstance(); 110451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return formatter.format(this); 110551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 110651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 110751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 110851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a string representation of this <tt>Date</tt> object of 110951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the form: 11102485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * <blockquote><pre> 111151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * d mon yyyy hh:mm:ss GMT</pre></blockquote> 111251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * where:<ul> 111351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>d</i> is the day of the month (<tt>1</tt> through <tt>31</tt>), 111451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as one or two decimal digits. 111551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>mon</i> is the month (<tt>Jan, Feb, Mar, Apr, May, Jun, Jul, 111651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Aug, Sep, Oct, Nov, Dec</tt>). 111751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>yyyy</i> is the year, as four decimal digits. 111851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>hh</i> is the hour of the day (<tt>00</tt> through <tt>23</tt>), 111951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as two decimal digits. 112051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>mm</i> is the minute within the hour (<tt>00</tt> through 112151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>59</tt>), as two decimal digits. 112251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>ss</i> is the second within the minute (<tt>00</tt> through 112351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>61</tt>), as two decimal digits. 112451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <li><i>GMT</i> is exactly the ASCII letters "<tt>GMT</tt>" to indicate 112551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Greenwich Mean Time. 112651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </ul><p> 112751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The result does not depend on the local time zone. 112851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 112951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a string representation of this date, using the Internet GMT 113051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * conventions. 113151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.DateFormat 113251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#toString() 113351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Date#toLocaleString() 113451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 113551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>DateFormat.format(Date date)</code>, using a 113651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * GMT <code>TimeZone</code>. 113751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 113851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 113951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String toGMTString() { 114051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // d MMM yyyy HH:mm:ss 'GMT' 114151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski long t = getTime(); 114251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(t); 114351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar.Date date = 114451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (BaseCalendar.Date) cal.getCalendarDate(getTime(), (TimeZone)null); 114551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski StringBuilder sb = new StringBuilder(32); 114651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 1).append(' '); // d 114751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM 114851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sb.append(date.getYear()).append(' '); // yyyy 114951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH 115051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm 115151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarUtils.sprintf0d(sb, date.getSeconds(), 2); // ss 115251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sb.append(" GMT"); // ' GMT' 115351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return sb.toString(); 115451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 115551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 115651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 115751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the offset, measured in minutes, for the local time zone 115851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * relative to UTC that is appropriate for the time represented by 115951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this <code>Date</code> object. 116051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 116151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * For example, in Massachusetts, five time zones west of Greenwich: 116251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 116351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * new Date(96, 1, 14).getTimezoneOffset() returns 300</pre></blockquote> 116451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * because on February 14, 1996, standard time (Eastern Standard Time) 116551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is in use, which is offset five hours from UTC; but: 116651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 116751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * new Date(96, 5, 1).getTimezoneOffset() returns 240</pre></blockquote> 116851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * because on June 1, 1996, daylight saving time (Eastern Daylight Time) 116951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is in use, which is offset only four hours from UTC.<p> 117051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This method produces the same result as if it computed: 117151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote><pre> 117251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * (this.getTime() - UTC(this.getYear(), 117351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this.getMonth(), 117451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this.getDate(), 117551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this.getHours(), 117651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this.getMinutes(), 117751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this.getSeconds())) / (60 * 1000) 117851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </pre></blockquote> 117951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 118051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the time-zone offset, in minutes, for the current time zone. 118151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar#ZONE_OFFSET 118251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Calendar#DST_OFFSET 118351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.TimeZone#getDefault 118451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated As of JDK version 1.1, 118551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * replaced by <code>-(Calendar.get(Calendar.ZONE_OFFSET) + 118651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)</code>. 118751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 118851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Deprecated 118951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getTimezoneOffset() { 119051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int zoneOffset; 119151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cdate == null) { 11922485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer // Android-changed: Android specific time zone logic 11939c853c5b9ebbb0ef60a013ae10ee411d70dfa832Piotr Jastrzebski GregorianCalendar cal = new GregorianCalendar(fastTime); 119488218876129da6f91f4c8a637c2d2c5a223795c1Narayan Kamath zoneOffset = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)); 119551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 119651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski normalize(); 119751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski zoneOffset = cdate.getZoneOffset(); 119851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 119951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return -zoneOffset/60000; // convert to minutes 120051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 120151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 120251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final BaseCalendar.Date getCalendarDate() { 120351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cdate == null) { 120451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(fastTime); 120551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate = (BaseCalendar.Date) cal.getCalendarDate(fastTime, 120651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski TimeZone.getDefaultRef()); 120751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 120851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return cdate; 120951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 121051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 121151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final BaseCalendar.Date normalize() { 121251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cdate == null) { 121351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(fastTime); 121451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate = (BaseCalendar.Date) cal.getCalendarDate(fastTime, 121551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski TimeZone.getDefaultRef()); 121651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return cdate; 121751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 121851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 121951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Normalize cdate with the TimeZone in cdate first. This is 122051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // required for the compatible behavior. 122151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (!cdate.isNormalized()) { 122251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate = normalize(cdate); 122351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 122451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 122551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // If the default TimeZone has changed, then recalculate the 122651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // fields with the new TimeZone. 122751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski TimeZone tz = TimeZone.getDefaultRef(); 122851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (tz != cdate.getZone()) { 122951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cdate.setZone(tz); 123051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CalendarSystem cal = getCalendarSystem(cdate); 123151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski cal.getCalendarDate(fastTime, cdate); 123251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 123351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return cdate; 123451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 123551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 123651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // fastTime and the returned data are in sync upon return. 123751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final BaseCalendar.Date normalize(BaseCalendar.Date date) { 123851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int y = date.getNormalizedYear(); 123951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int m = date.getMonth(); 124051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int d = date.getDayOfMonth(); 124151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int hh = date.getHours(); 124251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int mm = date.getMinutes(); 124351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int ss = date.getSeconds(); 124451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int ms = date.getMillis(); 124551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski TimeZone tz = date.getZone(); 124651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 124751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // If the specified year can't be handled using a long value 124851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // in milliseconds, GregorianCalendar is used for full 124951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // compatibility with underflow and overflow. This is required 125051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // by some JCK tests. The limits are based max year values - 125151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // years that can be represented by max values of d, hh, mm, 125251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // ss and ms. Also, let GregorianCalendar handle the default 125351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // cutover year so that we don't need to worry about the 125451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // transition here. 125551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (y == 1582 || y > 280000000 || y < -280000000) { 125651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (tz == null) { 125751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski tz = TimeZone.getTimeZone("GMT"); 125851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 125951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski GregorianCalendar gc = new GregorianCalendar(tz); 126051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski gc.clear(); 12612485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer gc.set(GregorianCalendar.MILLISECOND, ms); 126251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski gc.set(y, m-1, d, hh, mm, ss); 126351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski fastTime = gc.getTimeInMillis(); 126451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(fastTime); 126551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski date = (BaseCalendar.Date) cal.getCalendarDate(fastTime, tz); 126651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return date; 126751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 126851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 126951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar cal = getCalendarSystem(y); 127051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cal != getCalendarSystem(date)) { 127151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski date = (BaseCalendar.Date) cal.newCalendarDate(tz); 127251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski date.setNormalizedDate(y, m, d).setTimeOfDay(hh, mm, ss, ms); 127351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 127451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Perform the GregorianCalendar-style normalization. 127551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski fastTime = cal.getTime(date); 127651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 127751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // In case the normalized date requires the other calendar 127851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // system, we need to recalculate it using the other one. 127951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BaseCalendar ncal = getCalendarSystem(fastTime); 128051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (ncal != cal) { 128151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski date = (BaseCalendar.Date) ncal.newCalendarDate(tz); 128251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski date.setNormalizedDate(y, m, d).setTimeOfDay(hh, mm, ss, ms); 128351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski fastTime = ncal.getTime(date); 128451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 128551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return date; 128651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 128751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 128851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 128951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the Gregorian or Julian calendar system to use with the 129051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * given date. Use Gregorian from October 15, 1582. 129151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 129251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param year normalized calendar year (not -1900) 129351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the CalendarSystem to use for the specified date 129451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 129551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static final BaseCalendar getCalendarSystem(int year) { 129651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (year >= 1582) { 129751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return gcal; 129851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 129951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return getJulianCalendar(); 130051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 130151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 130251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static final BaseCalendar getCalendarSystem(long utc) { 130351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Quickly check if the time stamp given by `utc' is the Epoch 130451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // or later. If it's before 1970, we convert the cutover to 130551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // local time to compare. 130651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (utc >= 0 130751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski || utc >= GregorianCalendar.DEFAULT_GREGORIAN_CUTOVER 130851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski - TimeZone.getDefaultRef().getOffset(utc)) { 130951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return gcal; 131051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 131151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return getJulianCalendar(); 131251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 131351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 131451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static final BaseCalendar getCalendarSystem(BaseCalendar.Date cdate) { 131551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (jcal == null) { 131651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return gcal; 131751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 131851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (cdate.getEra() != null) { 131951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return jcal; 132051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 132151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return gcal; 132251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 132351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 132451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized private static final BaseCalendar getJulianCalendar() { 132551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (jcal == null) { 132651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jcal = (BaseCalendar) CalendarSystem.forName("julian"); 132751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 132851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return jcal; 132951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 133051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 133151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 133251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Save the state of this object to a stream (i.e., serialize it). 133351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 133451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @serialData The value returned by <code>getTime()</code> 133551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is emitted (long). This represents the offset from 133651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * January 1, 1970, 00:00:00 GMT in milliseconds. 133751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 133851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private void writeObject(ObjectOutputStream s) 133951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws IOException 134051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 134151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski s.writeLong(getTimeImpl()); 134251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 134351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 134451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 134551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Reconstitute this object from a stream (i.e., deserialize it). 134651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 134751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private void readObject(ObjectInputStream s) 134851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws IOException, ClassNotFoundException 134951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 135051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski fastTime = s.readLong(); 135151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13522485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer 13532485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer /** 13542485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * Obtains an instance of {@code Date} from an {@code Instant} object. 13552485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * <p> 13562485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * {@code Instant} uses a precision of nanoseconds, whereas {@code Date} 13572485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * uses a precision of milliseconds. The conversion will trancate any 13582485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * excess precision information as though the amount in nanoseconds was 13592485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * subject to integer division by one million. 13602485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * <p> 13612485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * {@code Instant} can store points on the time-line further in the future 13622485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * and further in the past than {@code Date}. In this scenario, this method 13632485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * will throw an exception. 13642485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * 13652485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @param instant the instant to convert 13662485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @return a {@code Date} representing the same point on the time-line as 13672485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * the provided instant 13682485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @exception NullPointerException if {@code instant} is null. 13692485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @exception IllegalArgumentException if the instant is too large to 13702485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * represent as a {@code Date} 13712485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @since 1.8 13722485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer */ 13732485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer public static Date from(Instant instant) { 13742485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer try { 13752485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer return new Date(instant.toEpochMilli()); 13762485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer } catch (ArithmeticException ex) { 13772485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer throw new IllegalArgumentException(ex); 13782485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer } 13792485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer } 13802485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer 13812485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer /** 13822485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * Converts this {@code Date} object to an {@code Instant}. 13832485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * <p> 13842485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * The conversion creates an {@code Instant} that represents the same 13852485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * point on the time-line as this {@code Date}. 13862485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * 13872485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @return an instant representing the same point on the time-line as 13882485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * this {@code Date} object 13892485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer * @since 1.8 13902485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer */ 13912485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer public Instant toInstant() { 13922485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer return Instant.ofEpochMilli(getTime()); 13932485f0b24ad267fa1134dd84b3bb47d3cf9b8d21Tobias Thierer } 139451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 1395