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

📄 dateparser.java

📁 用于移动设备上的java虚拟机源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)DateParser.java	1.8 02/10/10 @(#) * * Copyright (c) 1999-2002 Sun Microsystems, Inc.  All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms. */package com.sun.midp.io;import java.util.Hashtable;/** * This class implements somewhat of a subset of the J2SE Date class. * However, since the semantics of parse() is slightly different * (DateParser will not handle dates prior to 1/1/1970, amd to * be able to provide methods that will set timezone and DST * information, it is called DateParser. */public class DateParser {    /** The year represented by this date */    protected int year;    /** The month represented by this date */    protected int month;    /** The day of the month represented by this date */    protected int day;    /** The hour represented by this date */    protected int hour;    /** The minute represented by this date */    protected int minute;    /** The second represented by this date */    protected int second;    /** The millisecond represented by this date */    protected int milli;    /** The offset, in milliseconds, from GMT represented by this date */    protected int tzoffset;    /** The offset, in milliseconds, from GMT for the local time zone */    protected static int local_tz;    /**     * Allocates a <code>DateParser</code> object and initializes it so that      * it represents the instant at the start of the second specified      * by the <code>year</code>, <code>month</code>, <code>date</code>,      * <code>hrs</code>, <code>min</code>, and <code>sec</code> arguments,      * in the local time zone.      *     * @param   year    the year, >= 1583.     * @param   month   the month between 0-11.     * @param   day     the day of the month between 1-31.     * @param   hour    the hours between 0-23.     * @param   minute  the minutes between 0-59.     * @param   second  the seconds between 0-59.     */    DateParser(int year, int month, int day,                int hour, int minute, int second) {        if (year < 1583            || month < 0 || month > 11            || day < 0 || (day > days_in_month[month]                            && !(month == 1 && day == 29 && year % 4 == 0))            || hour < 0 || hour > 23            || minute < 0 || minute > 59            || second < 0 || second > 59) {            throw new IllegalArgumentException();        }                this.year = year;        this.month = month;        this.day = day;        this.hour = hour;        this.minute = minute;        this.second = second;        milli = 0;    }        /**     * Allocates a <code>DateParser</code> object and initializes it so that      * it represents the date and time indicated by the string      * <code>s</code>, which is interpreted as if by the      * {@link DateParser#parse} method.      *     * @param   s   a string representation of the date.     */    DateParser(String s) {        internalParse(s);    }        /**      * Set the local time zone for the DateParser class.     * <code>tz</code> must in abbreviated format, e.g. "PST"     * for Pacific Standard Time.     *     * @param tz The time zone string in abbreviated format.     */    static void setTimeZone(String tz) {        if (timezones.get(tz) == null) {            return;        }        local_tz = ((Integer)timezones.get(tz)).intValue();    }        /**     * Attempts to interpret the string <tt>s</tt> as a representation      * of a date and time. If the attempt is successful, the time      * indicated is returned represented as teh distance, measured in      * milliseconds, of that time from the epoch (00:00:00 GMT on      * January 1, 1970). If the attempt fails, an      * <tt>IllegalArgumentException</tt> is thrown.     * <p>     * It accepts many syntaxes; in particular, it recognizes the IETF      * standard date syntax: "Sat, 12 Aug 1995 13:30:00 GMT". It also      * understands the continental U.S. time-zone abbreviations, but for      * general use, a time-zone offset should be used: "Sat, 12 Aug 1995      * 13:30:00 GMT+0430" (4 hours, 30 minutes west of the Greenwich      * meridian). If no time zone is specified, the local time zone is      * assumed. GMT and UTC are considered equivalent.     * <p>     * The string <tt>s</tt> is processed from left to right, looking for      * data of interest. Any material in <tt>s</tt> that is within the      * ASCII parenthesis characters <tt>(</tt> and <tt>)</tt> is ignored.      * Parentheses may be nested. Otherwise, the only characters permitted      * within <tt>s</tt> are these ASCII characters:     * <blockquote><pre>     * abcdefghijklmnopqrstuvwxyz     * ABCDEFGHIJKLMNOPQRSTUVWXYZ     * 0123456789,+-:/</pre></blockquote>     * and whitespace characters.<p>     * A consecutive sequence of decimal digits is treated as a decimal      * number:<ul>     * <li>If a number is preceded by <tt>+</tt> or <tt>-</tt> and a year      *     has already been recognized, then the number is a time-zone      *     offset. If the number is less than 24, it is an offset measured      *     in hours. Otherwise, it is regarded as an offset in minutes,      *     expressed in 24-hour time format without punctuation. A      *     preceding <tt>-</tt> means a westward offset. Time zone offsets      *     are always relative to UTC (Greenwich). Thus, for example,      *     <tt>-5</tt> occurring in the string would mean "five hours west      *     of Greenwich" and <tt>+0430</tt> would mean "four hours and      *     thirty minutes east of Greenwich." It is permitted for the      *     string to specify <tt>GMT</tt>, <tt>UT</tt>, or <tt>UTC</tt>      *     redundantly-for example, <tt>GMT-5</tt> or <tt>utc+0430</tt>.     * <li>If a number is greater than 70, it is regarded as a year number.      *     It must be followed by a space, comma, slash, or end of string.      * <li>If the number is followed by a colon, it is regarded as an hour,      *     unless an hour has already been recognized, in which case it is      *     regarded as a minute.     * <li>If the number is followed by a slash, it is regarded as a month      *     (it is decreased by 1 to produce a number in the range <tt>0</tt>      *     to <tt>11</tt>), unless a month has already been recognized, in      *     which case it is regarded as a day of the month.     * <li>If the number is followed by whitespace, a comma, a hyphen, or      *     end of string, then if an hour has been recognized but not a      *     minute, it is regarded as a minute; otherwise, if a minute has      *     been recognized but not a second, it is regarded as a second;      *     otherwise, it is regarded as a day of the month. </ul><p>     * A consecutive sequence of letters is regarded as a word and treated      * as follows:<ul>     * <li>A word that matches <tt>AM</tt>, ignoring case, is ignored (but      *     the parse fails if an hour has not been recognized or is less      *     than <tt>1</tt> or greater than <tt>12</tt>).     * <li>A word that matches <tt>PM</tt>, ignoring case, adds <tt>12</tt>      *     to the hour (but the parse fails if an hour has not been      *     recognized or is less than <tt>1</tt> or greater than <tt>12</tt>).     * <li>Any word that matches any prefix of <tt>SUNDAY, MONDAY, TUESDAY,      *     WEDNESDAY, THURSDAY, FRIDAY</tt>, or <tt>SATURDAY</tt>, ignoring      *     case, is ignored. For example, <tt>sat, Friday, TUE</tt>, and      *     <tt>Thurs</tt> are ignored.     * <li>Otherwise, any word that matches any prefix of <tt>JANUARY,      *     FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER,      *     OCTOBER, NOVEMBER</tt>, or <tt>DECEMBER</tt>, ignoring case, and      *     considering them in the order given here, is recognized as     *     specifying a month and is converted to a number (<tt>0</tt> to      *     <tt>11</tt>). For example, <tt>aug, Sept, april</tt>, and      *     <tt>NOV</tt> are recognized as months. So is <tt>Ma</tt>, which      *     is recognized as <tt>MARCH</tt>, not <tt>MAY</tt>.     * <li>Any word that matches <tt>GMT, UT</tt>, or <tt>UTC</tt>, ignoring      *     case, is treated as referring to UTC.      * <li>Any word that matches <tt>EST, CST, MST</tt>, or <tt>PST</tt>,      *     ignoring case, is recognized as referring to the time zone in      *     North America that is five, six, seven, or eight hours west of      *     Greenwich, respectively. Any word that matches <tt>EDT, CDT,      *     MDT</tt>, or <tt>PDT</tt>, ignoring case, is recognized as      *     referring to the same time zone, respectively, during daylight      *     saving time.</ul><p>     * Once the entire string s has been scanned, it is converted to a time      * result in one of two ways. If a time zone or time-zone offset has been      * recognized, then the year, month, day of month, hour, minute, and      * second are interpreted in UTC and then the time-zone offset is      * applied. Otherwise, the year, month, day of month, hour, minute, and      * second are interpreted in the local time zone.     *     * @param   s   a string to be parsed as a date.     * @return  the distance in milliseconds from January 1, 1970, 00:00:00 GMT     *          represented by the string argument. Note that this method will     *          throw an <code>IllegalArgumentException</code> if the year      *          indicated in <code>s</code> is less than 1583.     */    public static long parse(String s) {        return (new DateParser(s)).getTime();    }        /**     * Get the year represented by this date.     *     * @return The year.     */    int getYear() {        return year;    }        /**     * Get the month represented by this date.     *     * @return The month.     */    int getMonth() {        return month;    }        /**     * Get the day of the month represented by this date.     *     * @return The day of the month.     */    int getDay() {        return day;    }        /**     * Get the hour represented by this date.     *     * @return The hour.     */    int getHour() {        return hour;    }        /**     * Get the minute represented by this date.     *     * @return The minute.     */    int getMinute() {        return minute;    }    /**     * Get the second represented by this date.     *     * @return The second.     */    int getSecond() {        return second;    }    /**      * Calculate the number of milliseconds since 01/01/1970 represented     * by this date.      *     * @return the number of milliseconds.     */    long getTime() {        long julianDay = computeJulianDay(year, month, day);        long millis = julianDayToMillis(julianDay);                int millisInDay = 0;        millisInDay += hour;        millisInDay *= 60;        millisInDay += minute; // now have minutes        millisInDay *= 60;        millisInDay += second; // now have seconds        millisInDay *= 1000;        millisInDay += milli; // now have millis                return millis + millisInDay - tzoffset;    }            /**      * Calculate the number of Julian days since Jan 1, year 1 as     * represented by the <code>year</code>, <code>month</code>,     * and <code>day</code>.     *

⌨️ 快捷键说明

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