dateutil.java

来自「这个weblogging 设计得比较精巧」· Java 代码 · 共 417 行

JAVA
417
字号
package org.roller.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Locale;/** * General purpose date utilities. * @author Mark Saarinen * @author Lance Lavandowska */public abstract class DateUtil extends Object{    public static final long millisInDay = 86400000;    // some static date formats    private static SimpleDateFormat[] mDateFormats = loadDateFormats();        private static final SimpleDateFormat mFormat8chars =         new SimpleDateFormat("yyyyMMdd");    private static final SimpleDateFormat mFormatIso8601Day =         new SimpleDateFormat("yyyy-MM-dd");    private static final SimpleDateFormat mFormatIso8601 =         new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");        // http://www.w3.org/Protocols/rfc822/Overview.html#z28    // Using Locale.US to fix ROL-725 and ROL-628    private static final SimpleDateFormat mFormatRfc822 =         new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US);     private static SimpleDateFormat[] loadDateFormats()    {        SimpleDateFormat[] temp = {            //new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS a"),            new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy"), // standard Date.toString() results            new SimpleDateFormat("M/d/yy hh:mm:ss"),            new SimpleDateFormat("M/d/yyyy hh:mm:ss"),            new SimpleDateFormat("M/d/yy hh:mm a"),            new SimpleDateFormat("M/d/yyyy hh:mm a"),            new SimpleDateFormat("M/d/yy HH:mm"),            new SimpleDateFormat("M/d/yyyy HH:mm"),            new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"),            new SimpleDateFormat("yy-MM-dd HH:mm:ss.SSS"),            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"), // standard Timestamp.toString() results            new SimpleDateFormat("M-d-yy HH:mm"),            new SimpleDateFormat("M-d-yyyy HH:mm"),            new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS"),            new SimpleDateFormat("M/d/yy"),            new SimpleDateFormat("M/d/yyyy"),            new SimpleDateFormat("M-d-yy"),            new SimpleDateFormat("M-d-yyyy"),            new SimpleDateFormat("MMMM d, yyyyy"),            new SimpleDateFormat("MMM d, yyyyy")        };            return temp;    }    //-----------------------------------------------------------------------    /**     * Gets the array of SimpleDateFormats that DateUtil knows about.    **/    private static SimpleDateFormat[] getFormats()    {        return mDateFormats;    }	//-----------------------------------------------------------------------	/**	 * Returns a Date set to the last possible millisecond of the day, just	 * before midnight. If a null day is passed in, a new Date is created.	 * midnight (00m 00h 00s)	 */	public static Date getEndOfDay(Date day)	{		return getEndOfDay(day,Calendar.getInstance());	}	public static Date getEndOfDay(Date day,Calendar cal)	{		if (day == null) day = new Date();		cal.setTime(day);		cal.set(Calendar.HOUR_OF_DAY, cal.getMaximum(Calendar.HOUR_OF_DAY));		cal.set(Calendar.MINUTE,      cal.getMaximum(Calendar.MINUTE));		cal.set(Calendar.SECOND,      cal.getMaximum(Calendar.SECOND));		cal.set(Calendar.MILLISECOND, cal.getMaximum(Calendar.MILLISECOND));        return cal.getTime();	}    //-----------------------------------------------------------------------	/**	 * Returns a Date set to the first possible millisecond of the day, just	 * after midnight. If a null day is passed in, a new Date is created.	 * midnight (00m 00h 00s)	 */	public static Date getStartOfDay(Date day)	{		return getStartOfDay(day, Calendar.getInstance());	}	/**	 * Returns a Date set to the first possible millisecond of the day, just	 * after midnight. If a null day is passed in, a new Date is created.	 * midnight (00m 00h 00s)	 */	public static Date getStartOfDay(Date day, Calendar cal)	{		if (day == null) day = new Date();		cal.setTime(day);		cal.set(Calendar.HOUR_OF_DAY, cal.getMinimum(Calendar.HOUR_OF_DAY));		cal.set(Calendar.MINUTE,      cal.getMinimum(Calendar.MINUTE));		cal.set(Calendar.SECOND,      cal.getMinimum(Calendar.SECOND));		cal.set(Calendar.MILLISECOND, cal.getMinimum(Calendar.MILLISECOND));        return cal.getTime();	}    /**     * Returns a Date set just to Noon, to the closest possible millisecond     * of the day. If a null day is passed in, a new Date is created.     * nnoon (00m 12h 00s)     */    public static Date getNoonOfDay(Date day, Calendar cal)    {        if (day == null) day = new Date();        cal.setTime(day);        cal.set(Calendar.HOUR_OF_DAY, 12);        cal.set(Calendar.MINUTE,      cal.getMinimum(Calendar.MINUTE));        cal.set(Calendar.SECOND,      cal.getMinimum(Calendar.SECOND));        cal.set(Calendar.MILLISECOND, cal.getMinimum(Calendar.MILLISECOND));        return cal.getTime();    }        //-----------------------------------------------------------------------    public static Date parseFromFormats(String aValue)    {        if (StringUtils.isEmpty(aValue)) return null;        // get DateUtil's formats        SimpleDateFormat formats[] = DateUtil.getFormats();        if (formats == null) return null;        // iterate over the array and parse        Date myDate = null;        for (int i = 0; i <formats.length; i++)        {            try            {                myDate = DateUtil.parse(aValue, formats[i]);                //if (myDate instanceof Date)                 return myDate;            }            catch (Exception e)            {                // do nothing because we want to try the next                // format if current one fails            }       }       // haven't returned so couldn't parse       return null;    }    //-----------------------------------------------------------------------    public static java.sql.Timestamp parseTimestampFromFormats(String aValue)    {        if (StringUtils.isEmpty(aValue)) return null;        // call the regular Date formatter        Date myDate = DateUtil.parseFromFormats(aValue);        if (myDate != null) return new java.sql.Timestamp(myDate.getTime());        return null;    }    //-----------------------------------------------------------------------    /**     * Returns a java.sql.Timestamp equal to the current time    **/    public static java.sql.Timestamp now()    {        return new java.sql.Timestamp(new java.util.Date().getTime());    }    //-----------------------------------------------------------------------    /**     * Returns a string the represents the passed-in date parsed     * according to the passed-in format.  Returns an empty string     * if the date or the format is null.    **/    public static String format(Date aDate, SimpleDateFormat aFormat)    {        if (aDate == null || aFormat == null ) { return ""; }        synchronized (aFormat)         {            return aFormat.format(aDate);        }    }    //-----------------------------------------------------------------------    /**     * Tries to take the passed-in String and format it as a date string in the     * the passed-in format.    **/    public static String formatDateString(String aString, SimpleDateFormat aFormat)    {        if (StringUtils.isEmpty(aString) || aFormat == null)  return "";        try        {            java.sql.Timestamp aDate = parseTimestampFromFormats(aString);            if (aDate != null)            {                return DateUtil.format(aDate, aFormat);            }        }        catch (Exception e)        {            // Could not parse aString.        }        return "";    }    //-----------------------------------------------------------------------    /**     * Returns a Date using the passed-in string and format.  Returns null if the string     * is null or empty or if the format is null.  The string must match the format.    **/    public static Date parse(String aValue, SimpleDateFormat aFormat) throws ParseException    {        if (StringUtils.isEmpty(aValue) || aFormat == null)        {            return null;        }        return aFormat.parse(aValue);    }    //-----------------------------------------------------------------------    /**     * Returns true if endDate is after startDate or if startDate equals endDate     * or if they are the same date.  Returns false if either value is null.    **/    public static boolean isValidDateRange(Date startDate, Date endDate)    {        return isValidDateRange(startDate, endDate, true);    }    //-----------------------------------------------------------------------    /**     * Returns true if endDate is after startDate or if startDate equals endDate.     * Returns false if either value is null.  If equalOK, returns true if the     * dates are equal.    **/    public static boolean isValidDateRange(Date startDate, Date endDate, boolean equalOK)    {        // false if either value is null        if (startDate == null || endDate == null) { return false; }        if (equalOK)        {            // true if they are equal            if (startDate.equals(endDate)) { return true; }        }        // true if endDate after startDate        if (endDate.after(startDate)) { return true; }        return false;    }    //-----------------------------------------------------------------------    // returns full timestamp format    public static java.text.SimpleDateFormat defaultTimestampFormat()    {        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");    }    //-----------------------------------------------------------------------    // convenience method returns minimal date format    public static java.text.SimpleDateFormat get8charDateFormat()    {        return DateUtil.mFormat8chars;    }    //-----------------------------------------------------------------------    // convenience method returns minimal date format    public static java.text.SimpleDateFormat defaultDateFormat()    {        return DateUtil.friendlyDateFormat(true);    }    //-----------------------------------------------------------------------    // convenience method    public static String defaultTimestamp(Date date)    {        return DateUtil.format(date, DateUtil.defaultTimestampFormat());    }        //-----------------------------------------------------------------------    // convenience method    public static String defaultDate(Date date)    {        return DateUtil.format(date, DateUtil.defaultDateFormat());    }    //-----------------------------------------------------------------------    // convenience method returns long friendly timestamp format    public static java.text.SimpleDateFormat friendlyTimestampFormat()    {        return new java.text.SimpleDateFormat("dd.MM.yyyy HH:mm:ss");    }    //-----------------------------------------------------------------------    // convenience method returns long friendly formatted timestamp    public static String friendlyTimestamp(Date date)    {        return DateUtil.format(date, DateUtil.friendlyTimestampFormat());    }    //-----------------------------------------------------------------------    // convenience method returns long friendly formatted timestamp    public static String format8chars(Date date)    {        return DateUtil.format(date, mFormat8chars);    }    //-----------------------------------------------------------------------    // convenience method returns long friendly formatted timestamp    public static String formatIso8601Day(Date date)    {        return DateUtil.format(date, mFormatIso8601Day);    }    //-----------------------------------------------------------------------    public static String formatRfc822(Date date)    {        return DateUtil.format(date,mFormatRfc822);    }    //-----------------------------------------------------------------------    // This is a hack, but it seems to work    public static String formatIso8601(Date date)    {        if (date == null) return "";                // Add a colon 2 chars before the end of the string        // to make it a valid ISO-8601 date.                 String str = DateUtil.format(date,mFormatIso8601);        StringBuffer sb = new StringBuffer();        sb.append( str.substring(0,str.length()-2) );        sb.append( ":" );        sb.append( str.substring(str.length()-2) );        return sb.toString();    }    //-----------------------------------------------------------------------    // convenience method returns minimal date format    public static java.text.SimpleDateFormat minimalDateFormat()    {        return DateUtil.friendlyDateFormat(true);    }    //-----------------------------------------------------------------------    // convenience method using minimal date format    public static String minimalDate(Date date)    {        return DateUtil.format(date, DateUtil.minimalDateFormat());    }    //-----------------------------------------------------------------------    // convenience method that returns friendly data format    // using full month, day, year digits.    public static java.text.SimpleDateFormat fullDateFormat()    {        return DateUtil.friendlyDateFormat(false);    }    //-----------------------------------------------------------------------    public static String fullDate(Date date)    {        return DateUtil.format(date, DateUtil.fullDateFormat());    }    //-----------------------------------------------------------------------    /** Returns a "friendly" date format.     *  @param mimimalFormat Should the date format allow single digits.    **/    public static java.text.SimpleDateFormat friendlyDateFormat(boolean minimalFormat)    {        if (minimalFormat)        {            return new java.text.SimpleDateFormat("d.M.yy");        }        return new java.text.SimpleDateFormat("dd.MM.yyyy");    }    //-----------------------------------------------------------------------    /**     * Format the date using the "friendly" date format.     */    public static String friendlyDate(Date date, boolean minimalFormat)    {        return DateUtil.format(date, DateUtil.friendlyDateFormat(minimalFormat));    }    //-----------------------------------------------------------------------    // convenience method    public static String friendlyDate(Date date)    {        return DateUtil.format(date, DateUtil.friendlyDateFormat(true));    }        public static Date parseIso8601(String value) throws Exception    {        return ISO8601DateParser.parse(value);    }}

⌨️ 快捷键说明

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