All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ro.nextreports.engine.util.DateUtil Maven / Gradle / Ivy

Go to download

NextReports Engine is a lightweight Java platform development library which can be used to run NextReports inside your applications.

There is a newer version: 9.2
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ro.nextreports.engine.util;

import java.util.Date;
import java.util.Calendar;
import java.sql.Timestamp;

/**
 * Created by IntelliJ IDEA.
 * User: mihai.panaitescu
 * Date: May 22, 2008
 * Time: 1:46:12 PM
 */
public class DateUtil {

    /**
     * Use only static methods
     */
    private DateUtil() {
    }

    /**
     * Compares dates d1 and d2 taking into
     * consideration only the year, month and day
     * @param d1 the first date
     * @param d2 the second date
     * @return true if d1 is after d2,
     * false otherwise
     * @see java.util.Calendar#after(java.lang.Object)
     * @see #before(java.util.Date , java.util.Date)
     * @see #compare(java.util.Date , java.util.Date)
     */
    public static boolean after(Date d1, Date d2) {
        d1 = floor(d1);
        Calendar c1 = Calendar.getInstance();
        c1.setTime(d1);

        d2 = floor(d2);
        Calendar c2 = Calendar.getInstance();
        c2.setTime(d2);

        return c1.after(c2);
    }

    /**
     * Compares dates d1 and d2 taking into
     * consideration only the year, month and day
     * @param d1 the first date
     * @param d2 the second date
     * @return true if d1 is before d2,
     * false otherwise
     * @see Calendar#before(java.lang.Object)
     * @see #after(Date, Date)
     * @see #compare(Date, Date)
     */
    public static boolean before(Date d1, Date d2) {
        d1 = floor(d1);
        Calendar c1 = Calendar.getInstance();
        c1.setTime(d1);

        d2 = floor(d2);
        Calendar c2 = Calendar.getInstance();
        c2.setTime(d2);

        return c1.before(c2);
    }

    /**
     * Compares two dates taking into consideration only the year, month and day
     * @param d1 the first date
     * @param d2 the second date
     * @return a negative integer, zero, or a positive integer as
     * d1 is less than, equal to, or greater than d2
     * @see java.util.Comparator
     * @see #after(Date, Date)
     * @see #before(Date, Date)
     */
    public static int compare(Date d1, Date d2) {
        Calendar c1 = Calendar.getInstance();
        c1.setTime(d1);
        Calendar c2 = Calendar.getInstance();
        c2.setTime(d2);

        if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)) {
            if (c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)) {
                return c1.get(Calendar.DAY_OF_MONTH) - c2.get(Calendar.DAY_OF_MONTH);
            }
            return c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
        }
        return c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
    }

    /** Get the year of the date
     *
     * @param date date
     * @return year of the date
     */
    public static int getYear(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.YEAR);
    }

    /** Get the month of the date
     *
     * @param date date
     * @return month of the date
     */
    public static int getMonth(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MONTH);
    }

    /** Get the day of year of the date
     *
     * @param date date
     * @return day of year of the date
     */
    public static int getDayOfYear(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_YEAR);
    }

    /** Get the day of month of the date
     *
     * @param date date
     * @return day of month of the date
     */
    public static int getDayOfMonth(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_MONTH);
    }

    /** Get the day of week of the date
     *
     * @param date date
     * @return day of week of the date
     */
    public static int getDayOfWeek(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_WEEK);
    }

    /** Get the hour of the date
     *
     * @param date date
     * @return hour of the date
     */
    public static int getHour(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.HOUR_OF_DAY);
    }

    /** Get the minute of the date
     *
     * @param date date
     * @return minute of the date
     */
    public static int getMinute(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MINUTE);
    }

    /** Get the second of the date
     *
     * @param date date
     * @return second of the date
     */
    public static int getSecond(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.SECOND);
    }

    /**
     * Rounds a date to hour 0, minute 0, second 0 and millisecond 0
     * @param d the date
     * @return the rounded date
     */
    public static Date floor(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }

    /**
     * Rounds a date to hour 23, minute 59, second 59 and millisecond 999
     * @param d the date
     * @return the rounded date
     */
    public static Date ceil(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        c.set(Calendar.MILLISECOND, 999);
        return c.getTime();
    }

    /** Test to see if two dates are in the same day of year
     *
     * @param dateOne first date
     * @param dateTwo second date
     * @return true if the two dates are in the same day of year
     */
    public static boolean sameDay(Date dateOne, Date dateTwo) {
        if ((dateOne == null) || (dateTwo == null)) {
            return false;
        }

        Calendar cal = Calendar.getInstance();
        cal.setTime(dateOne);
        int year = cal.get(Calendar.YEAR);
        int day = cal.get(Calendar.DAY_OF_YEAR);

        cal.setTime(dateTwo);
        int year2 = cal.get(Calendar.YEAR);
        int day2 = cal.get(Calendar.DAY_OF_YEAR);

        return ( (year == year2) && (day == day2) );
    }

    /** Test to see if two dates are in the same week
     *
     * @param dateOne first date
     * @param dateTwo second date
     * @return true if the two dates are in the same week
     */
    public static boolean sameWeek(Date dateOne, Date dateTwo) {
        if ((dateOne == null) || (dateTwo == null)) {
            return false;
        }

        Calendar cal = Calendar.getInstance();
        cal.setTime(dateOne);
        int year = cal.get(Calendar.YEAR);
        int week = cal.get(Calendar.WEEK_OF_YEAR);

        cal.setTime(dateTwo);
        int year2 = cal.get(Calendar.YEAR);
        int week2 = cal.get(Calendar.WEEK_OF_YEAR);

        return ( (year == year2) && (week == week2) );
    }

    /** Test to see if two dates are in the same month
     *
     * @param dateOne first date
     * @param dateTwo second date
     * @return true if the two dates are in the same month
     */
    public static boolean sameMonth(Date dateOne, Date dateTwo) {
        if ((dateOne == null) || (dateTwo == null)) {
            return false;
        }

        Calendar cal = Calendar.getInstance();
        cal.setTime(dateOne);
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH);

        cal.setTime(dateTwo);
        int year2 = cal.get(Calendar.YEAR);
        int month2 = cal.get(Calendar.MONTH);

        return ( (year == year2) && (month == month2) );
    }

    /** Test to see if two dates are in the same hour of day
     *
     * @param dateOne first date
     * @param dateTwo second date
     * @return true if the two dates are in the same hour of day
     */
    public static boolean sameHour(Date dateOne, Date dateTwo) {
        if ((dateOne == null) || (dateTwo == null)) {
            return false;
        }

        Calendar cal = Calendar.getInstance();
        cal.setTime(dateOne);
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DAY_OF_YEAR);
        int hour = cal.get(Calendar.HOUR_OF_DAY);

        cal.setTime(dateTwo);
        int year2 = cal.get(Calendar.YEAR);
        int month2 = cal.get(Calendar.MONTH);
        int day2 = cal.get(Calendar.DAY_OF_YEAR);
        int hour2 = cal.get(Calendar.HOUR_OF_DAY);

        return ( (year == year2) && (month == month2) && (day == day2) &&
                 (hour == hour2));
    }

    /** Get number of days between two dates
     *
     *  @param first first date
     *  @param second second date
     *  @return number of days if first date less than second date,
     *       0 if first date is bigger than second date,
     *       1 if dates are the same
     *
     */
      public static int getNumberOfDays(Date first, Date second)
      {
          Calendar c = Calendar.getInstance();
          int result = 0;
          int compare = first.compareTo(second);
          if (compare > 0) return 0;
          if (compare == 0) return 1;

          c.setTime(first);
          int firstDay = c.get(Calendar.DAY_OF_YEAR);
          int firstYear = c.get(Calendar.YEAR);
          int firstDays = c.getActualMaximum(Calendar.DAY_OF_YEAR);

          c.setTime(second);
          int secondDay = c.get(Calendar.DAY_OF_YEAR);
          int secondYear = c.get(Calendar.YEAR);

          // if dates in the same year
          if (firstYear == secondYear)
          {
              result = secondDay-firstDay+1;
          }

          // different years
          else
          {
              // days from the first year
              result += firstDays - firstDay + 1;

              // add days from all years between the two dates years
              for (int i = firstYear+1; i< secondYear; i++)
              {
                  c.set(i,0,0);
                  result += c.getActualMaximum(Calendar.DAY_OF_YEAR);
              }

              // days from last year
              result += secondDay;
          }

          return result;
      }

    /** Get elapsedtime between two dates
     *
     *  @param first first date
     *  @param second second date
     *  @return null if first date is after second date
     *          an integer array of three elemets ( days, hours minutes )
     */
     public static int[] getElapsedTime(Date first, Date second) {
         if (first.compareTo(second) == 1 ) {
            return null;
         }
         int difDays = 0;
         int difHours = 0;
         int difMinutes = 0;

         Calendar c = Calendar.getInstance();
         c.setTime(first);
         int h1 = c.get(Calendar.HOUR_OF_DAY);
         int m1 = c.get(Calendar.MINUTE);

         c.setTime(second);
         int h2 = c.get(Calendar.HOUR_OF_DAY);
         int m2 = c.get(Calendar.MINUTE);

         if (sameDay(first, second)) {
             difHours = h2 - h1;
         } else {
             difDays = getNumberOfDays(first, second)-1;
             if (h1 >= h2) {
                difDays--;
                difHours = (24 - h1) + h2;
             } else {
                difHours = h2 - h1;
             }
         }

         if (m1 >= m2) {
             difHours--;
             difMinutes = (60 - m1) + m2;
         } else {
             difMinutes = m2 - m1;
         }

         int[] result = new int[3];
         result[0] = difDays;
         result[1] = difHours;
         result[2] = difMinutes;
         return result;
     }

    /** Add minutes to a date
     *
     * @param d date
     * @param minutes minutes
     * @return new date
     */
    public static Date addMinutes(Date d, int minutes) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.MINUTE, minutes);
        return cal.getTime();
    }
    
    /** Set minutes to a date
    *
    * @param d date
    * @param minutes minutes
    * @return new date
    */
   public static Date setMinutes(Date d, int minutes) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(d);
       cal.set(Calendar.MINUTE, minutes);
       return cal.getTime();
   }

    /** Add hours to a date
     *
     * @param d date
     * @param hours hours
     * @return new date
     */
    public static Date addHours(Date d, int hours) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.HOUR_OF_DAY, hours);
        return cal.getTime();
    }
    
    /** Set hours to a date
    *
    * @param d date
    * @param hours hours
    * @return new date
    */
   public static Date setHours(Date d, int hours) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(d);
       cal.set(Calendar.HOUR_OF_DAY, hours);
       return cal.getTime();
   }

    /** Add days to a date
     *
     * @param d date
     * @param days days
     * @return new date
     */
    public static Date addDays(Date d, int days) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.DAY_OF_YEAR, days);
        return cal.getTime();
    }

    /** Add weeks to a date
     *
     * @param d date
     * @param weeks weeks
     * @return new date
     */
    public static Date addWeeks(Date d, int weeks) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.WEEK_OF_YEAR, weeks);
        return cal.getTime();
    }

    /** Add months to a date
     *
     * @param d date
     * @param months months
     * @return new date
     */
    public static Date addMonths(Date d, int months) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.MONTH, months);
        return cal.getTime();
    }

    /**
     * Get last day from a month
     * @param date date
     * @return last day from a month
     */
    public static int getLastDayOfMonth(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.getActualMaximum(Calendar.DATE);
    }

    /**
     * Get a date from a timestamp
     * @param timestamp time stamp
     * @return date from a timestamp
     */
    public static Date getFromTimestamp(Timestamp timestamp) {
        if (timestamp == null) {
            return null;
        }
        return new Date(timestamp.getTime());
    }
    
    /**
     * Get first date from last week
     * @param d date
     * @return first date from last week
     */
    public static Date getFirstDayFromLastWeek(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    
    /**
     * Get last date from last week
     * @param d date
     * @return last date from last week
     */
    public static Date getLastDayFromLastWeek(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }
    
    /**
     * Get first date from current week
     * @param d date
     * @return first date from current week
     */
    public static Date getFirstDayFromCurrentWeek(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);        
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    
    /**
     * Get last date from current week
     * @param d date
     * @return last date from current week
     */
    public static Date getLastDayFromCurrentWeek(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);        
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }
    
    /**
     * Get first date from last month
     * @param d date
     * @return first date from last month
     */
    public static Date getFirstDayFromLastMonth(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);                
        cal.add(Calendar.MONTH, -1);
        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);
        return cal.getTime();
    }
    
    /**
     * Get last date from last month
     * @param d date
     * @return last date from last month
     */
    public static Date getLastDayFromLastMonth(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);        
        cal.add(Calendar.MONTH, -1);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }
    
    /**
     * Get first date from current month
     * @param d date
     * @return first date from current month
     */
    public static Date getFirstDayFromCurrentMonth(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);                        
        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);
        return cal.getTime();
    }
    
    /**
     * Get last date from current month
     * @param d date
     * @return last date from current month
     */
    public static Date getLastDayFromCurrentMonth(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);                
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }
    
    /**
     * Get first date from last year
     * @param d date
     * @return first date from last year
     */
    public static Date getFirstDayFromLastYear(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);                
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.MONTH, Calendar.JANUARY);
        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);
        return cal.getTime();
    }
    
    /**
     * Get last date from last year
     * @param d date
     * @return last date from last year
     */
    public static Date getLastDayFromLastYear(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);        
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.MONTH, Calendar.DECEMBER);
        cal.set(Calendar.DAY_OF_MONTH, 31);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }
    
    /**
     * Get first date from current year
     * @param d date
     * @return first date from current year
     */
    public static Date getFirstDayFromCurrentYear(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);                        
        cal.set(Calendar.MONTH, Calendar.JANUARY);
        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);
        return cal.getTime();
    }
    
    /**
     * Get last date from current year
     * @param d date
     * @return last date from current year
     */
    public static Date getLastDayFromCurrentYear(Date d) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);                
        cal.set(Calendar.MONTH, Calendar.DECEMBER);
        cal.set(Calendar.DAY_OF_MONTH, 31);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }
    
    /**
     * Get date with n unitType before
     * @param d date
     * @param n number of units
     * @param unitType unit type : one of  Calendar.DAY_OF_YEAR, Calendar.WEEK_OF_YEAR, Calendar.MONTH, Calendar.YEAR;
     * @return
     */
    public static Date getLastNDay(Date d, int n, int unitType) {
    	Calendar cal = Calendar.getInstance();
        cal.setTime(d); 
        cal.add(unitType, -n);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy