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

de.alpharogroup.date.Age 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.io.Serializable;
import java.util.Calendar;
import java.util.Date;

/**
 * Helper class to present one long value from a calculate two Dates in a human readable string.
 * 
 * @version 1.0
 * @author Asterios Raptis
 */
public class Age implements Serializable
{

	/**
	 * The serialVersionUID from Age.
	 */
	private static final long serialVersionUID = -1110889254918807595L;

	/** The Constant ONE_SECOND. */
	public static final long ONE_SECOND = 1000l;

	/** The Constant ONE_MINUTE. */
	public static final long ONE_MINUTE = ONE_SECOND * 60l;

	/** The Constant ONE_HOUR. */
	public static final long ONE_HOUR = ONE_MINUTE * 60l;

	/** The Constant ONE_DAY. */
	public static final long ONE_DAY = ONE_HOUR * 24l;

	/** The Constant ONE_DEFAULT_MONTH. */
	public static final long ONE_DEFAULT_MONTH = ONE_DAY * 30l;

	/** The Constant ONE_YEAR. */
	public static final long ONE_YEAR = ONE_DAY * 365l + ONE_HOUR * 6l;

	/** The elapsed time in long. */
	private long elapsed;

	/** The birthday. */
	private Calendar birthday;

	/** The point where the Age stops. */
	private Calendar till;

	/**
	 * Instantiates a new Age object from the given Date objects.
	 * 
	 * @param birthday
	 *            The birthday.
	 */
	public Age(final Date birthday)
	{
		this(birthday, new Date(System.currentTimeMillis()));
	}

	/**
	 * Instantiates a new Age object from the given Date objects.
	 * 
	 * @param birthday
	 *            The birthday.
	 * @param till
	 *            The point where the Age stops.
	 */
	public Age(final Date birthday, final Date till)
	{
		this.elapsed = CalculateDateUtils.calculateElapsedTime(birthday, till);
		this.birthday = Calendar.getInstance();
		this.birthday.setTime(birthday);
		this.till = Calendar.getInstance();
		this.till.setTime(till);
	}

	/**
	 * Default constructor.
	 * 
	 * @param elapsed
	 *            The elapsed time in long.
	 */
	public Age(final long elapsed)
	{
		this.elapsed = elapsed;
	}

	/**
	 * Calculate in days.
	 * 
	 * @return the double
	 */
	public double calculateInDays()
	{

		return this.calculateInDays(this.elapsed);

	}

	/**
	 * Calculate in days.
	 * 
	 * @param time
	 *            the time
	 * @return the double
	 */
	public double calculateInDays(final long time)
	{

		return (double)time / (double)ONE_DAY;

	}

	/**
	 * Calculate in default month.
	 * 
	 * @return the double
	 */
	public double calculateInDefaultMonth()
	{
		return this.calculateInDefaultMonth(this.elapsed);
	}

	/**
	 * Calculate in default month. It is calculated that one default month is 30 days.
	 * 
	 * @param time
	 *            the time.
	 * @return the result as double.
	 */
	public double calculateInDefaultMonth(final long time)
	{
		return (double)time / (double)ONE_DEFAULT_MONTH;
	}

	/**
	 * Calculate in hours.
	 * 
	 * @return the double
	 */
	public double calculateInHours()
	{

		return this.calculateInHours(this.elapsed);

	}

	/**
	 * Calculate in hours.
	 * 
	 * @param time
	 *            the time
	 * @return the double
	 */
	public double calculateInHours(final long time)
	{

		return (double)time / (double)ONE_HOUR;

	}

	/**
	 * Calculate in minutes.
	 * 
	 * @return the double
	 */
	public double calculateInMinutes()
	{

		return this.calculateInMinutes(this.elapsed);

	}

	/**
	 * Calculate in minutes.
	 * 
	 * @param time
	 *            the time
	 * @return the double
	 */
	public double calculateInMinutes(final long time)
	{

		return (double)time / (double)ONE_MINUTE;

	}

	/**
	 * Calculate in seconds.
	 * 
	 * @return the double
	 */
	public double calculateInSeconds()
	{

		return this.calculateInSeconds(this.elapsed);

	}

	/**
	 * Calculate in minutes.
	 * 
	 * @param time
	 *            the time
	 * @return the double
	 */
	public double calculateInSeconds(final long time)
	{

		return (double)time / (double)ONE_SECOND;

	}

	/**
	 * Calculate in years.
	 * 
	 * @return the double
	 */
	public double calculateInYears()
	{

		return this.calculateInYears(this.elapsed);

	}

	/**
	 * Calculate in years.
	 * 
	 * @param el
	 *            The time.
	 * @return the double
	 */
	public double calculateInYears(final long el)
	{

		return (double)el / (double)ONE_YEAR;

	}

	/**
	 * Calculate in years months days hours minutes and seconds.
	 * 
	 * @return the int[] Returns an int array where the first element is the years the second
	 *         element the months the third element the days then hours, minutes and seconds.
	 */
	public int[] calculateInYearsMonthsDaysHoursMinutesAndSeconds()
	{

		return this.calculateInYearsMonthsDaysHoursMinutesAndSeconds(this.elapsed);

	}

	/**
	 * Calculate in years months days hours minutes and seconds.
	 * 
	 * @param compute
	 *            The long to calculate.
	 * @return the int[] Returns an int array where the first element is the years the second
	 *         element the months the third element the days then hours, minutes and seconds.
	 */
	public int[] calculateInYearsMonthsDaysHoursMinutesAndSeconds(final long compute)
	{
		long uebrig = -1;
		final int[] result = new int[6];
		final int years = (int)this.calculateInYears(compute);

		if (0 < years)
		{
			result[0] = years;
			uebrig = compute - years * ONE_YEAR;
		}
		else
		{
			result[0] = 0;
		}
		final int months = (int)this.calculateInDefaultMonth(uebrig);

		if (0 < months)
		{
			result[1] = months;
			uebrig -= months * ONE_DEFAULT_MONTH;
		}
		else
		{
			result[1] = 0;
		}

		final int days = (int)this.calculateInDays(uebrig);
		if (0 < days)
		{
			result[2] = days;
			uebrig -= days * ONE_DAY;
		}
		else
		{
			result[2] = 0;
		}
		final int hours = (int)this.calculateInHours(uebrig);
		if (0 < hours)
		{
			result[3] = hours;
			uebrig -= hours * ONE_HOUR;
		}
		else
		{
			result[3] = 0;
		}
		final int minutes = (int)this.calculateInMinutes(uebrig);
		if (0 < minutes)
		{
			result[4] = minutes;
			uebrig -= minutes * ONE_MINUTE;
		}
		else
		{
			result[4] = 0;
		}
		final int seconds = (int)this.calculateInSeconds(uebrig);
		if (0 < seconds)
		{
			result[5] = seconds;
			uebrig -= seconds * ONE_SECOND;
		}
		else
		{
			result[5] = 0;
		}

		return result;

	}

	/**
	 * Gets a human readable string from the age.
	 * 
	 * @return Returns a human readable string from the age.
	 */
	public String getHumanReadableAge()
	{
		return this.getHumanReadableAge(this.calculateInYearsMonthsDaysHoursMinutesAndSeconds());
	}

	/**
	 * Gets a human readable string from the age.
	 * 
	 * @param readableAge
	 *            The int array with the age values.
	 * @return Returns a human readable string from the age.
	 */
	public String getHumanReadableAge(final int[] readableAge)
	{
		if (null == readableAge || readableAge.length != 6)
		{
			throw new IllegalArgumentException(
				"Int array should not be null and the length should be equal 6.");
		}
		final StringBuffer result = new StringBuffer();
		result.append("Your are ");
		result.append(readableAge[0]).append(" years");
		result.append(" ");
		result.append(readableAge[1]).append(" months");
		result.append(" ");
		result.append(readableAge[2]).append(" days");
		result.append(" ");
		result.append(readableAge[3]).append(" hours");
		result.append(" ");
		result.append(readableAge[4]).append(" minutes");
		result.append(" ");
		result.append(readableAge[5]).append(" seconds");
		result.append(" young!");
		return result.toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy