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

de.alpharogroup.date.CalculateDateUtils Maven / Gradle / Ivy

The newest version!
/**
 * The MIT License
 *
 * Copyright (C) 2007 Asterios Raptis
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package de.alpharogroup.date;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Utility class for the use of Date and Calendar object.
 *
 * @author Asterios Raptis
 * @version 1.0
 */
public class CalculateDateUtils implements DatePatterns
{

	/**
	 * Adds days to the given Date object and returns it. Note: you can add negative values too for
	 * get date in past.
	 *
	 * @param date
	 *            The Date object to add the days.
	 * @param addDays
	 *            The days to add.
	 * @return The resulted Date object.
	 */
	public static Date addDays(final Date date, final int addDays)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.DATE, addDays);
		return dateOnCalendar.getTime();
	}

	/**
	 * Adds hours to the given Date object and returns it. Note: you can add negative values too for
	 * get date in past.
	 *
	 * @param date
	 *            The Date object to add the hours.
	 * @param addHours
	 *            The days to add.
	 * @return The resulted Date object.
	 */
	public static Date addHours(final Date date, final int addHours)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.HOUR, addHours);
		return dateOnCalendar.getTime();
	}

	/**
	 * Adds milliseconds to the given Date object and returns it. Note: you can add negative values
	 * too for get date in past.
	 *
	 * @param date
	 *            The Date object to add the milliseconds.
	 * @param addMilliseconds
	 *            The milliseconds to add.
	 * @return The resulted Date object.
	 */
	public static Date addMilliseconds(final Date date, final int addMilliseconds)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.MILLISECOND, addMilliseconds);
		return dateOnCalendar.getTime();
	}

	/**
	 * Adds minutes to the given Date object and returns it. Note: you can add negative values too
	 * for get date in past.
	 *
	 * @param date
	 *            The Date object to add the minutes.
	 * @param addMinutes
	 *            The days to add.
	 * @return The resulted Date object.
	 */
	public static Date addMinutes(final Date date, final int addMinutes)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.MINUTE, addMinutes);
		return dateOnCalendar.getTime();
	}

	/**
	 * Adds months to the given Date object and returns it. Note: you can add negative values too
	 * for get date in past.
	 *
	 * @param date
	 *            The Date object to add the years.
	 * @param addMonths
	 *            The months to add.
	 * @return The resulted Date object.
	 */
	public static Date addMonths(final Date date, final int addMonths)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.MONTH, addMonths);
		return dateOnCalendar.getTime();
	}

	/**
	 * Adds seconds to the given Date object and returns it. Note: you can add negative values too
	 * for get date in past.
	 *
	 * @param date
	 *            The Date object to add the seconds.
	 * @param addSeconds
	 *            The seconds to add.
	 * @return The resulted Date object.
	 */
	public static Date addSeconds(final Date date, final int addSeconds)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.SECOND, addSeconds);
		return dateOnCalendar.getTime();
	}

	/**
	 * Adds weeks to the given Date object and returns it. Note: you can add negative values too for
	 * get date in past.
	 *
	 * @param date
	 *            The Date object to add the weeks.
	 * @param addWeeks
	 *            The weeks to add.
	 * @return The resulted Date object.
	 */
	public static Date addWeeks(final Date date, final int addWeeks)
	{
		return addDays(date, addWeeks * 7);
	}

	/**
	 * Adds years to the given Date object and returns it. Note: you can add negative values too for
	 * get date in past.
	 *
	 * @param date
	 *            The Date object to add the years.
	 * @param addYears
	 *            The years to add.
	 * @return The resulted Date object.
	 */
	public static Date addYears(final Date date, final int addYears)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.YEAR, addYears);
		return dateOnCalendar.getTime();
	}

	/**
	 * Returns true if the given from Date is after the given when Date otherwise false.
	 *
	 * @param point
	 *            the point of time from where to check if it is after.
	 * @param when
	 *            the when
	 * @return true, if successful
	 */
	public static boolean after(final Date point, final Date when)
	{
		final Calendar pointCalendar = Calendar.getInstance();
		pointCalendar.setTime(point);
		final Calendar whenCalendar = Calendar.getInstance();
		whenCalendar.setTime(when);
		return pointCalendar.after(whenCalendar);
	}

	/**
	 * Returns true if the given from Date is before the given when Date otherwise false.
	 *
	 * @param point
	 *            the point of time from where to check if it is before.
	 * @param when
	 *            the when
	 * @return true, if successful
	 */
	public static boolean before(final Date point, final Date when)
	{
		final Calendar pointCalendar = Calendar.getInstance();
		pointCalendar.setTime(point);
		final Calendar whenCalendar = Calendar.getInstance();
		whenCalendar.setTime(when);
		return pointCalendar.before(whenCalendar);
	}

	/**
	 * Calculates the elapsed time from the past to now.
	 *
	 * @param past
	 *            The Date object in the past.
	 * @param now
	 *            The Date from now.
	 * @return The elapsed time in long.
	 */
	public static long calculateElapsedTime(final Date past, final Date now)
	{
		final long elapsedTime = now.getTime() - past.getTime();
		return elapsedTime;
	}

	/**
	 * Calculates the elapsed time from the future to now.
	 *
	 * @param now
	 *            The Date from now.
	 * @param future
	 *            The Date in the future.
	 * @return The elapsed time in long.
	 */
	public static long calculateTimeFromNow(final Date now, final Date future)
	{
		final long elapsedTime = future.getTime() - now.getTime();
		return elapsedTime;
	}

	/**
	 * Computes the Age from the birthday till the computeDate object.
	 *
	 * @param birthday
	 *            The Date object from the birthday.
	 * @param computeDate
	 *            The Date-object from where to compute.
	 * @return Returns the computed age.
	 */
	public static int computeAge(final Date birthday, final Date computeDate)
	{
		final long ageInLong = CalculateDateUtils.calculateElapsedTime(birthday, computeDate);
		final Age age = new Age(ageInLong);
		return (int)age.calculateInYears();
	}

	/**
	 * Computes the eastern sunday for the given year. Year should be greater than 1583.
	 *
	 * @param year
	 *            The year to compute the eastern sunday.
	 * @return The eastern sunday.
	 */
	public static Date computeEasternSunday(final int year)
	{

		final int easternSundayNumber = computeEasternSundayNumber(year);
		final int month = easternSundayNumber / 31;
		final int day = easternSundayNumber % 31 + 1;

		return CreateDateUtils.newDate(year, month - 1, day);
	}

	/**
	 * Computes the number from eastern sunday for the given year. Year should be greater the 1583.
	 *
	 * @param year
	 *            The year to compute the number from eastern sunday.
	 * @return The number from eastern sunday.
	 */
	public static int computeEasternSundayNumber(final int year)
	{
		final int i = year % 19;
		final int j = year / 100;
		final int k = year % 100;
		final int l = (19 * i + j - j / 4 - (j - (j + 8) / 25 + 1) / 3 + 15) % 30;
		final int m = (32 + 2 * (j % 4) + 2 * (k / 4) - l - k % 4) % 7;
		final int n = l + m - 7 * ((i + 11 * l + 22 * m) / 451) + 114;
		return n;
	}

	/**
	 * Checks if the Date object "between" is between from the given to Date objects.
	 *
	 * @param start
	 *            the start time.
	 * @param end
	 *            the end time.
	 * @param between
	 *            the date to compare if it is between.
	 * @return true, if is between otherwise false.
	 */
	public static boolean isBetween(final Date start, final Date end, final Date between)
	{
		final long min = start.getTime();
		final long max = end.getTime();
		final long index = between.getTime();
		if (min <= index && index <= max)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * Checks if the given date object is in the future.
	 *
	 * @param date
	 *            The date to check.
	 * @return Returns true if the given date is in the future otherwise false.
	 */
	public static boolean isDateInTheFuture(final Date date)
	{
		return !CalculateDateUtils.isDateInThePast(date);
	}

	/**
	 * Checks if the given date object is in the past.
	 *
	 * @param date
	 *            The date to check.
	 * @return Returns true if the given date is in the past otherwise false.
	 */
	public static boolean isDateInThePast(final Date date)
	{
		boolean inPast = false;
		final Calendar compare = Calendar.getInstance();
		compare.setTime(date);
		final Calendar now = Calendar.getInstance();
		now.setTime(new Date(System.currentTimeMillis()));
		inPast = now.after(compare);
		return inPast;
	}

	/**
	 * Determines if the given year is a leap year. Wrappes the method isLeapYear(int) from the
	 * GregorianCalendar.
	 *
	 * @param year
	 *            The year to determine.
	 * @return True if the year is a leap year otherwise false.
	 */
	public static boolean isLeapYear(final int year)
	{
		final GregorianCalendar gc = new GregorianCalendar();
		return gc.isLeapYear(year);
	}

	/**
	 * Checks if the Date is valid to convert.
	 *
	 * @param date
	 *            The Date as String
	 * @param format
	 *            The Format for the Date to parse
	 * @param lenient
	 *            Specify whether or not date/time interpretation is to be lenient.
	 * @return True if the Date is valid otherwise false.
	 */
	public static boolean isValidDate(final String date, final String format, final boolean lenient)
	{
		boolean isValid = true;
		if (date == null || format == null || format.length() <= 0)
		{
			return false;
		}
		final DateFormat df = new SimpleDateFormat(format);
		df.setLenient(lenient);
		try
		{
			df.parse(date);
		}
		catch (final ParseException e)
		{
			isValid = false;
		}
		return isValid;
	}

	/**
	 * Substract days to the given Date object and returns it.
	 *
	 * @param date
	 *            The Date object to substract the days.
	 * @param substractDays
	 *            The days to substract.
	 * @return The resulted Date object.
	 */
	public static Date substractDaysFromDate(final Date date, final int substractDays)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.DATE, substractDays * -1);
		return dateOnCalendar.getTime();
	}

	/**
	 * Substract months to the given Date object and returns it.
	 *
	 * @param date
	 *            The Date object to substract the months.
	 * @param substractMonths
	 *            The months to substract.
	 * @return The resulted Date object.
	 */
	public static Date substractMonthsFromDate(final Date date, final int substractMonths)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.MONTH, substractMonths * -1);
		return dateOnCalendar.getTime();
	}

	/**
	 * Substract weeks to the given Date object and returns it.
	 *
	 * @param date
	 *            The Date object to substract the weeks.
	 * @param substractWeeks
	 *            The weeks to substract.
	 * @return The resulted Date object.
	 */
	public static Date substractWeeksFromDate(final Date date, final int substractWeeks)
	{
		return substractDaysFromDate(date, substractWeeks * 7);
	}

	/**
	 * Substract years to the given Date object and returns it.
	 *
	 * @param date
	 *            The Date object to substract the years.
	 * @param substractYears
	 *            The years to substract.
	 * @return The resulted Date object.
	 */
	public static Date substractYearsFromDate(final Date date, final int substractYears)
	{
		final Calendar dateOnCalendar = Calendar.getInstance();
		dateOnCalendar.setTime(date);
		dateOnCalendar.add(Calendar.YEAR, substractYears * -1);
		return dateOnCalendar.getTime();
	}

	/**
	 * Util-class. Do not make instances from this class.
	 */
	private CalculateDateUtils()
	{
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy