1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectInputStream; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.text.DateFormat; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.text.DateFormatSymbols; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.text.SimpleDateFormat; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.internal.nls.Messages; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Date} represents a specific moment in time, to the millisecond. 323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see System#currentTimeMillis 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Calendar 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see GregorianCalendar 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see SimpleTimeZone 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see TimeZone 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Date implements Serializable, Cloneable, Comparable<Date> { 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 7523967970034938905L; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Used by parse() 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static int creationYear = new Date().getYear(); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private transient long milliseconds; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson private static String[] dayOfWeekNames = { "Sun", "Mon", "Tue", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson "Wed", "Thu", "Fri", "Sat" }; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson private static String[] monthNames = { "Jan", "Feb", "Mar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson "Apr", "May", "Jun", "Jul", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson "Aug", "Sep", "Oct", "Nov", "Dec"}; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ 543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 568ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * Initializes this {@code Date} instance to the current time. 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Date() { 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this(System.currentTimeMillis()); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new {@code Date} initialized to midnight in the default {@code TimeZone} on 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the specified date. 653819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param year 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the year, 0 is 1900. 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param month 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the month, 0 - 11. 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param day 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the day of the month, 1 - 31. 723819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link GregorianCalendar#GregorianCalendar(int, int, int)} 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Date(int year, int month, int day) { 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(false); 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(1900 + year, month, day); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new {@code Date} initialized to the specified date and time in the 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * default {@code TimeZone}. 863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param year 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the year, 0 is 1900. 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param month 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the month, 0 - 11. 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param day 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the day of the month, 1 - 31. 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param hour 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the hour of day, 0 - 23. 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param minute 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the minute of the hour, 0 - 59. 973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link GregorianCalendar#GregorianCalendar(int, int, int, int, int)} 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Date(int year, int month, int day, int hour, int minute) { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(false); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(1900 + year, month, day, hour, minute); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new {@code Date} initialized to the specified date and time in the 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * default {@code TimeZone}. 1113819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param year 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the year, 0 is 1900. 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param month 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the month, 0 - 11. 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param day 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the day of the month, 1 - 31. 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param hour 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the hour of day, 0 - 23. 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param minute 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the minute of the hour, 0 - 59. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param second 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the second of the minute, 0 - 59. 1243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link GregorianCalendar#GregorianCalendar(int, int, int, int, int, int)} 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Date(int year, int month, int day, int hour, int minute, int second) { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(false); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(1900 + year, month, day, hour, minute, second); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Initializes this {@code Date} instance using the specified millisecond value. The 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * value is the number of milliseconds since Jan. 1, 1970 GMT. 1383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param milliseconds 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the number of milliseconds since Jan. 1, 1970 GMT. 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Date(long milliseconds) { 1433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson this.milliseconds = milliseconds; 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new {@code Date} initialized to the date and time parsed from the 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specified String. 1493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param string 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the String to parse. 1523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@link DateFormat} 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Date(String string) { 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = parse(string); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns if this {@code Date} is after the specified Date. 1623819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param date 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * a Date instance to compare. 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Date} is after the specified {@code Date}, 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean after(Date date) { 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return milliseconds > date.milliseconds; 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns if this {@code Date} is before the specified Date. 1743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param date 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * a {@code Date} instance to compare. 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Date} is before the specified {@code Date}, 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean before(Date date) { 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return milliseconds < date.milliseconds; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a new {@code Date} with the same millisecond value as this {@code Date}. 1863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a shallow copy of this {@code Date}. 1883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.lang.Cloneable 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object clone() { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.clone(); 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (CloneNotSupportedException e) { 196a0ebf91e58c17487a8bd1be6e64193193deae26fJesse Wilson throw new AssertionError(e); // android-changed 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare the receiver to the specified {@code Date} to determine the relative 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ordering. 2033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param date 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * a {@code Date} to compare against. 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an {@code int < 0} if this {@code Date} is less than the specified {@code Date}, {@code 0} if 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they are equal, and an {@code int > 0} if this {@code Date} is greater. 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int compareTo(Date date) { 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (milliseconds < date.milliseconds) { 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (milliseconds == date.milliseconds) { 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 1; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compares the specified object to this {@code Date} and returns if they are equal. 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * To be equal, the object must be an instance of {@code Date} and have the same millisecond 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * value. 2233819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to compare with this object. 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if the specified object is equal to this {@code Date}, {@code false} 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 2283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #hashCode 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (object == this) || (object instanceof Date) 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && (milliseconds == ((Date) object).milliseconds); 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar day of the month for this {@code Date} object. 2393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the day of the month. 2413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.DATE)} 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getDate() { 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.DATE); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar day of the week for this {@code Date} object. 2513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the day of the week. 2533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.DAY_OF_WEEK)} 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getDay() { 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.DAY_OF_WEEK) - 1; 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar hour of the day for this {@code Date} object. 2633819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the hour of the day. 2653819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.HOUR_OF_DAY)} 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getHours() { 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.HOUR_OF_DAY); 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar minute of the hour for this {@code Date} object. 2753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the minutes. 2773819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.MINUTE)} 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getMinutes() { 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.MINUTE); 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar month for this {@code Date} object. 2873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the month. 2893819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.MONTH)} 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getMonth() { 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.MONTH); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar second of the minute for this {@code Date} object. 2993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the seconds. 3013819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.SECOND)} 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getSeconds() { 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.SECOND); 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns this {@code Date} as a millisecond value. The value is the number of 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * milliseconds since Jan. 1, 1970, midnight GMT. 3123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of milliseconds since Jan. 1, 1970, midnight GMT. 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public long getTime() { 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return milliseconds; 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the timezone offset in minutes of the default {@code TimeZone}. 3213819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the timezone offset in minutes of the default {@code TimeZone}. 3233819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code (Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / 60000} 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getTimezoneOffset() { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 60000; 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the gregorian calendar year since 1900 for this {@code Date} object. 3353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the year - 1900. 3373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.get(Calendar.YEAR) - 1900} 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getYear() { 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new GregorianCalendar(milliseconds).get(Calendar.YEAR) - 1900; 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns an integer hash code for the receiver. Objects which are equal 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the same value for this method. 3483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this {@code Date}'s hash. 3503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #equals 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (int) (milliseconds >>> 32) ^ (int) milliseconds; 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static int parse(String string, String[] array) { 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0, alength = array.length, slength = string.length(); i < alength; i++) { 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (string.regionMatches(true, 0, array[i], 0, slength)) { 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i; 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the millisecond value of the date and time parsed from the 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specified {@code String}. Many date/time formats are recognized, including IETF 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * standard syntax, i.e. Tue, 22 Jun 1999 12:16:00 GMT-0500 3713819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param string 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the String to parse. 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the millisecond value parsed from the String. 3753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@link DateFormat} 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static long parse(String string) { 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (string == null) { 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // luni.06=The string argument is null 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(Messages.getString("luni.06")); //$NON-NLS-1$ 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char sign = 0; 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int commentLevel = 0; 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int offset = 0, length = string.length(), state = 0; 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int year = -1, month = -1, date = -1; 3903819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson int hour = -1, minute = -1, second = -1, zoneOffset = 0, minutesOffset = 0; 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean zone = false; 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final int PAD = 0, LETTERS = 1, NUMBERS = 2; 39301021fcb0c9026e81ac2c262caf5e2ec830a7025Jesse Wilson StringBuilder buffer = new StringBuilder(); 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (offset <= length) { 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char next = offset < length ? string.charAt(offset) : '\r'; 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project offset++; 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (next == '(') { 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project commentLevel++; 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (commentLevel > 0) { 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (next == ')') { 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project commentLevel--; 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (commentLevel == 0) { 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project next = ' '; 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project continue; 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int nextState = PAD; 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ('a' <= next && next <= 'z' || 'A' <= next && next <= 'Z') { 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nextState = LETTERS; 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ('0' <= next && next <= '9') { 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nextState = NUMBERS; 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (!Character.isSpace(next) && ",+-:/".indexOf(next) == -1) { //$NON-NLS-1$ 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (state == NUMBERS && nextState != NUMBERS) { 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int digit = Integer.parseInt(buffer.toString()); 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.setLength(0); 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sign == '+' || sign == '-') { 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zoneOffset == 0) { 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zone = true; 4283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (next == ':') { 4293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson minutesOffset = sign == '-' ? -Integer 4303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson .parseInt(string.substring(offset, 4313819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson offset + 2)) : Integer 4323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson .parseInt(string.substring(offset, 4333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson offset + 2)); 4343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson offset += 2; 4353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zoneOffset = sign == '-' ? -digit : digit; 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sign = 0; 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (digit >= 70) { 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (year == -1 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && (Character.isSpace(next) || next == ',' 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || next == '/' || next == '\r')) { 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project year = digit; 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (next == ':') { 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hour == -1) { 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour = digit; 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (minute == -1) { 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project minute = digit; 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (next == '/') { 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (month == -1) { 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project month = digit - 1; 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (date == -1) { 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project date = digit; 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (Character.isSpace(next) || next == ',' 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || next == '-' || next == '\r') { 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hour != -1 && minute == -1) { 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project minute = digit; 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (minute != -1 && second == -1) { 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project second = digit; 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (date == -1) { 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project date = digit; 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (year == -1) { 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project year = digit; 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (year == -1 && month != -1 && date != -1) { 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project year = digit; 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (state == LETTERS && nextState != LETTERS) { 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String text = buffer.toString().toUpperCase(); 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.setLength(0); 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.length() == 1) { 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("AM")) { //$NON-NLS-1$ 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hour == 12) { 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour = 0; 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (hour < 1 || hour > 12) { 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (text.equals("PM")) { //$NON-NLS-1$ 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hour == 12) { 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour = 0; 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (hour < 1 || hour > 12) { 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour += 12; 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DateFormatSymbols symbols = new DateFormatSymbols(Locale.US); 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] weekdays = symbols.getWeekdays(), months = symbols 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getMonths(); 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int value; 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (parse(text, weekdays) != -1) {/* empty */ 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (month == -1 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && (month = parse(text, months)) != -1) {/* empty */ 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (text.equals("GMT") || text.equals("UT") //$NON-NLS-1$ //$NON-NLS-2$ 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || text.equals("UTC")) { //$NON-NLS-1$ 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zone = true; 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zoneOffset = 0; 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ((value = zone(text)) != 0) { 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zone = true; 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zoneOffset = value; 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (next == '+' || (year != -1 && next == '-')) { 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sign = next; 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (!Character.isSpace(next) && next != ',' 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && nextState != NUMBERS) { 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sign = 0; 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (nextState == LETTERS || nextState == NUMBERS) { 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(next); 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project state = nextState; 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (year != -1 && month != -1 && date != -1) { 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hour == -1) { 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour = 0; 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (minute == -1) { 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project minute = 0; 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (second == -1) { 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project second = 0; 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (year < (creationYear - 80)) { 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project year += 2000; 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (year < 100) { 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project year += 1900; 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 5513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson minute -= minutesOffset; 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zone) { 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zoneOffset >= 24 || zoneOffset <= -24) { 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour -= zoneOffset / 100; 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project minute -= zoneOffset % 100; 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hour -= zoneOffset; 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return UTC(year - 1900, month, date, hour, minute, second); 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Date(year - 1900, month, date, hour, minute, second) 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getTime(); 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the gregorian calendar day of the month for this {@code Date} object. 5693819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param day 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the day of the month. 5723819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.set(Calendar.DATE, day)} 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setDate(int day) { 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(Calendar.DATE, day); 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the gregorian calendar hour of the day for this {@code Date} object. 5843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param hour 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the hour of the day. 5873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.set(Calendar.HOUR_OF_DAY, hour)} 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setHours(int hour) { 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(Calendar.HOUR_OF_DAY, hour); 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the gregorian calendar minute of the hour for this {@code Date} object. 5993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param minute 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the minutes. 6023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.set(Calendar.MINUTE, minute)} 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setMinutes(int minute) { 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(Calendar.MINUTE, minute); 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the gregorian calendar month for this {@code Date} object. 6143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param month 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the month. 6173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.set(Calendar.MONTH, month)} 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setMonth(int month) { 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(Calendar.MONTH, month); 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the gregorian calendar second of the minute for this {@code Date} object. 6293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param second 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the seconds. 6323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.set(Calendar.SECOND, second)} 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setSeconds(int second) { 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(Calendar.SECOND, second); 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets this {@code Date} to the specified millisecond value. The value is the 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of milliseconds since Jan. 1, 1970 GMT. 6453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param milliseconds 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the number of milliseconds since Jan. 1, 1970 GMT. 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setTime(long milliseconds) { 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.milliseconds = milliseconds; 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the gregorian calendar year since 1900 for this {@code Date} object. 6553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param year 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the year since 1900. 6583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@code Calendar.set(Calendar.YEAR, year + 1900)} 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setYear(int year) { 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(milliseconds); 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(Calendar.YEAR, year + 1900); 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project milliseconds = cal.getTimeInMillis(); 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the string representation of this {@code Date} in GMT in the format: 22 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Jun 1999 13:02:00 GMT 6713819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the string representation of this {@code Date} in GMT. 6733819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@link DateFormat} 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toGMTString() { 6788ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // TODO: why does this insert the year manually instead of using one SimpleDateFormat? 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SimpleDateFormat format1 = new SimpleDateFormat("d MMM ", Locale.US); //$NON-NLS-1$ 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SimpleDateFormat format2 = new SimpleDateFormat( 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " HH:mm:ss 'GMT'", Locale.US); //$NON-NLS-1$ 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TimeZone gmtZone = TimeZone.getTimeZone("GMT"); //$NON-NLS-1$ 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project format1.setTimeZone(gmtZone); 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project format2.setTimeZone(gmtZone); 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar gc = new GregorianCalendar(gmtZone); 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project gc.setTimeInMillis(milliseconds); 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return format1.format(this) + gc.get(Calendar.YEAR) 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + format2.format(this); 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the string representation of this {@code Date} for the default {@code Locale}. 6933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the string representation of this {@code Date} for the default {@code Locale}. 6953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use {@link DateFormat} 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toLocaleString() { 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return DateFormat.getDateTimeInstance().format(this); 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 7048ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * Returns a string representation of this {@code Date}. 7058ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * The formatting is equivalent to using a {@code SimpleDateFormat} with 7068ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * the format string "EEE MMM dd HH:mm:ss zzz yyyy", which looks something 7078ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * like "Tue Jun 22 13:07:00 PDT 1999". The current default time zone and 7088ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * locale are used. If you need control over the time zone or locale, 7098ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes * use {@code SimpleDateFormat} instead. 7103819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the string representation of this {@code Date}. 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 7158ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // BEGIN android-changed: fixed to use time zone display names ("PST") 7168ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // rather than ids ("America/Los_Angeles"). 7178ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // Equivalent to the following one-liner, though that's currently 8x slower 7188ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // at 1655us versus 195us... 7198ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // return new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").format(d); 7203819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson Calendar cal = new GregorianCalendar(milliseconds); 7218ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes TimeZone tz = cal.getTimeZone(); 7223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return dayOfWeekNames[cal.get(Calendar.DAY_OF_WEEK) - 1] + " " + monthNames[cal.get(Calendar.MONTH)]//$NON-NLS-1$ 7233819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson + " " + toTwoDigits(cal.get(Calendar.DAY_OF_MONTH)) + " " + toTwoDigits(cal.get(Calendar.HOUR_OF_DAY))//$NON-NLS-1$ //$NON-NLS-2$ 7243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson + ":" + toTwoDigits(cal.get(Calendar.MINUTE)) + ":" + toTwoDigits(cal.get(Calendar.SECOND))//$NON-NLS-1$ //$NON-NLS-2$ 7258ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes + " " + tz.getDisplayName(tz.inDaylightTime(this), TimeZone.SHORT) + " " + cal.get(Calendar.YEAR);//$NON-NLS-1$ //$NON-NLS-2$ 7268ee76d4d3ee58109f859964e56d5c7f3d8c566d9Elliott Hughes // END android-changed 7273819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 7283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 729369a8d273180de03122c1b90a0949ce7b52427baElliott Hughes private String toTwoDigits(int n) { 730369a8d273180de03122c1b90a0949ce7b52427baElliott Hughes if (n >= 10) { 731369a8d273180de03122c1b90a0949ce7b52427baElliott Hughes return Integer.toString(n);//$NON-NLS-1$ 7323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } else { 733369a8d273180de03122c1b90a0949ce7b52427baElliott Hughes return "0" + n;//$NON-NLS-1$ 7343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the millisecond value of the specified date and time in GMT. 7393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param year 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the year, 0 is 1900. 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param month 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the month, 0 - 11. 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param day 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the day of the month, 1 - 31. 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param hour 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the hour of day, 0 - 23. 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param minute 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the minute of the hour, 0 - 59. 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param second 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the second of the minute, 0 - 59. 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the date and time in GMT in milliseconds. 7533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated use: <code> 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cal.set(year + 1900, month, day, hour, minute, second); 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cal.getTime().getTime();</code> 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static long UTC(int year, int month, int day, int hour, int minute, 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int second) { 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GregorianCalendar cal = new GregorianCalendar(false); 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.setTimeZone(TimeZone.getTimeZone("GMT")); //$NON-NLS-1$ 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cal.set(1900 + year, month, day, hour, minute, second); 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return cal.getTimeInMillis(); 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static int zone(String text) { 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("EST")) { //$NON-NLS-1$ 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -5; 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("EDT")) { //$NON-NLS-1$ 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -4; 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("CST")) { //$NON-NLS-1$ 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -6; 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("CDT")) { //$NON-NLS-1$ 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -5; 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("MST")) { //$NON-NLS-1$ 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -7; 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("MDT")) { //$NON-NLS-1$ 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -6; 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("PST")) { //$NON-NLS-1$ 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -8; 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (text.equals("PDT")) { //$NON-NLS-1$ 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -7; 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.writeLong(getTime()); 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void readObject(ObjectInputStream stream) throws IOException, 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassNotFoundException { 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultReadObject(); 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setTime(stream.readLong()); 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 807