Mega Code Archive

 
Categories / Java / Data Type
 

Date utility class

/*   *    D E E P B L A C K    B L O G    L I C E N S E  *   *  * Copyright (c) 2001-2003 Timothy J. Kettering  All rights  * reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  *  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in  *    the documentation and/or other materials provided with the  *    distribution.  *  * 3. The names "deepBlack" must not be used to endorse or promote   *    products derived from this software without prior written   *    permission. For written permission, please contact   *    the copyright holder at tim@blackcore.com.  *  *   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  * SUCH DAMAGE.  *   */ import java.util.Date; import java.util.TimeZone; import java.util.GregorianCalendar; import java.util.Calendar; /**  * Date utility class file.  * @author timster@blackcore.com  * Nov 17, 2002  *  * @todo - Only the timestamp parameter methods have been tested somewhat  * extensively to be sure they return correct timestamps.  The string  * and integer parameter methods need to be refined for accurate behavior, and  * better failsafes.  *   */ public class DateUtility {   /**    * Returns a primitive long which represents the timestamp of the first millisecond    * of the month matching the supplied parameters.  This method assumes the    * default timezone.    * @param year    * @param month    * @return long    */   static public long getFirstMilliOfMonth(String year, String month)   {     return getFirstMilliOfMonth(year, month, TimeZone.getDefault());   }   /**    * Returns a primitive long which represents the timestamp of the last millisecond    * of the month matching the supplied parameters.  This method assumes the    * default timezone.    * @param year    * @param month    * @return long    */    static public long getLastMilliOfMonth(String year, String month)   {     return getLastMilliOfMonth(year, month, TimeZone.getDefault());   }    /**    * This utility returns the first millsecond     * of the month, and year, and timezone supplied as arguments.    *    * @param String month    * @param String year    * @param TimeZone tz    * @return long    */   static public long getFirstMilliOfMonth(String year, String month, TimeZone tz)   {     return getFirstMilliOfMonth(Integer.parseInt(year), Integer.parseInt(month), tz);   }   /**    * This utility returns the first millsecond     * of the month, and year, and timezone supplied as arguments.    *    * @param int month    * @param int year    * @param TimeZone tz    * @return long    */   static public long getFirstMilliOfMonth(int year, int month, TimeZone tz)   {     GregorianCalendar cal = new GregorianCalendar(year, (month - 1), 1);     cal.setTimeZone(tz);     return cal.getTime().getTime();   }      /**    * This will retun the first millisecond of the month     * that contains the timestamp provided    * @param timestamp    * @return long    */   static public long getFirstMilliOfMonth(long timestamp, TimeZone tz)   {     GregorianCalendar cal = new GregorianCalendar();     cal.setTimeZone(tz);     cal.setTime(new Date(timestamp));     cal.set(Calendar.DAY_OF_MONTH, 1);     cal.set(Calendar.HOUR_OF_DAY, 0);     cal.set(Calendar.MINUTE, 0);     cal.set(Calendar.SECOND, 0);     cal.set(Calendar.MILLISECOND, 0);          Date date = cal.getTime();          return date.getTime();   }      /**    * Gets the last millsecond of the month, according to the timestamp and     * timezone arguments.    * @param timestamp    * @param tz    * @return long    */   static public long getLastMilliOfMonth(long timestamp, TimeZone tz)   {     timestamp = getFirstMilliOfMonth(timestamp, tz);          GregorianCalendar cal = new GregorianCalendar();     cal.setTimeZone(tz);     cal.setTime(new Date(timestamp));     // now we'll roll the calendar forward one month.     // in the case of december, we need to roll forward the year too         if(cal.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER)     {       cal.roll(GregorianCalendar.YEAR, true);     }          cal.roll(GregorianCalendar.MONTH, true);          long date = cal.getTime().getTime();          date = date - 1L;     return date;   }      /**    * This utility returns the last millsecond     * of the month, and year, and timezone supplied as arguments.    *    * @param String month    * @param String year    * @param TimeZone tz    * @return long    */   static public long getLastMilliOfMonth(String year, String month, TimeZone tz)   {     long time = getLastMilliOfMonth(Integer.parseInt(year), Integer.parseInt(month), tz);     return time;   }       /**    * This utility returns the last millsecond     * of the month, and year, and timezone supplied as arguments.    *    * @param int month    * @param int year    * @param TimeZone tz    * @return long    */   static public long getLastMilliOfMonth(int year, int month, TimeZone tz)   {          GregorianCalendar cal = new GregorianCalendar(year, (month - 1), 1);     cal.setTimeZone(tz);          // set the maximum last day     int lastday = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);     cal.set(GregorianCalendar.DAY_OF_MONTH, lastday);     // set other calendar maximums.  - we should do this programatically     // too but i'm too lazy, and i dont think they're gonna change the gregorian     // calendar anytime soon.. eh?     cal.set(GregorianCalendar.HOUR_OF_DAY, 23);     cal.set(GregorianCalendar.MINUTE, 59);     cal.set(GregorianCalendar.SECOND, 59);     cal.set(GregorianCalendar.MILLISECOND, 999);     long time = cal.getTime().getTime();     return time;   }  }