/* * Encog(tm) Core v3.4 - Java Version * http://www.heatonresearch.com/encog/ * https://github.com/encog/encog-java-core * Copyright 2008-2016 Heaton Research, Inc. * * Licensed 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. * * For more information on Heaton Research copyrights, licenses * and trademarks visit: * http://www.heatonresearch.com/copyright */ package org.encog.util.time; import java.util.Calendar; import java.util.Date; /** * A timespan between two Dates. * * @author jheaton * */ public class TimeSpan { /** * Years in a century. */ public static final int YEARS_CENTURY = 100; /** * Hours in a day. */ public static final int HOURS_DAY = 24; /** * Minutes in an hour. */ public static final int MINUTES_HOUR = 60; /** * Seconds in a minute. */ public static final int SECONDS_MINUTE = 60; /** * Months in a year. */ public static final int MONTHS_YEAR = 12; /** * Days in a week. */ public static final int DAYS_WEEK = 7; /** * Years in a mil. */ public static final int YEARS_MIL = 1000; /** * Years in a score. */ public static final int YEARS_SCORE = 20; /** * The from date. */ private final Date from; /** * The to date. */ private final Date to; /** * Construct a time span. * * @param from * The from date/time. * @param to * The two date/time. */ public TimeSpan(final Date from, final Date to) { this.from = from; this.to = to; } /** * @return the from */ public Date getFrom() { return this.from; } /** * Get the time span specified by the unit. * * @param unit * The unit desired. * @return The timespan in the specified unit. */ public long getSpan(final TimeUnit unit) { switch (unit) { case SECONDS: return getSpanSeconds(); case MINUTES: return getSpanMinutes(); case HOURS: return getSpanHours(); case DAYS: return getSpanDays(); case WEEKS: return getSpanWeeks(); case FORTNIGHTS: return getSpanFortnights(); case MONTHS: return getSpanMonths(); case YEARS: return getSpanYears(); case SCORES: return getSpanScores(); case CENTURIES: return getSpanCenturies(); case MILLENNIA: return getSpanMillennia(); default: return 0; } } /** * The time span in centuries. * * @return The time span. */ private long getSpanCenturies() { return getSpanYears() / TimeSpan.YEARS_CENTURY; } /** * The time span in centuries. * * @return The time span. */ private long getSpanDays() { return getSpanHours() / TimeSpan.HOURS_DAY; } /** * The time span in centuries. * * @return The time span. */ private long getSpanFortnights() { return getSpanWeeks() / 2; } /** * The time span in centuries. * * @return The time span. */ private long getSpanHours() { return getSpanMinutes() / TimeSpan.MINUTES_HOUR; } /** * The time span in centuries. * * @return The time span. */ private long getSpanMillennia() { return getSpanYears() / TimeSpan.YEARS_MIL; } /** * The time span in centuries. * * @return The time span. */ private long getSpanMinutes() { return getSpanSeconds() / TimeSpan.SECONDS_MINUTE; } /** * The time span in centuries. * * @return The time span. */ private long getSpanMonths() { final Calendar startCal = Calendar.getInstance(); startCal.setTime(this.from); final Calendar endCal = Calendar.getInstance(); endCal.setTime(this.to); return endCal.get(Calendar.MONTH) - startCal.get(Calendar.MONTH) + (endCal.get(Calendar.YEAR) - startCal.get(Calendar.YEAR)) * TimeSpan.MONTHS_YEAR; } /** * The time span in centuries. * * @return The time span. */ private long getSpanScores() { return getSpanYears() / TimeSpan.YEARS_SCORE; } /** * The time span in centuries. * * @return The time span. */ private long getSpanSeconds() { final Calendar fromCalendar = Calendar.getInstance(); final Calendar toCalendar = Calendar.getInstance(); fromCalendar.setTime(this.from); toCalendar.setTime(this.to); return (toCalendar.getTimeInMillis() - fromCalendar.getTimeInMillis()) / TimeSpan.YEARS_MIL; } /** * The time span in centuries. * * @return The time span. */ private long getSpanWeeks() { return getSpanDays() / TimeSpan.DAYS_WEEK; } /** * The time span in centuries. * * @return The time span. */ private long getSpanYears() { return getSpanMonths() / TimeSpan.MONTHS_YEAR; } /** * @return the to date/time. */ public Date getTo() { return this.to; } }