view artifacts-common/src/main/java/org/dive4elements/artifacts/common/utils/DateUtils.java @ 561:1c2ce0501305

Added some methods for Abflussjahr
author mschaefer
date Mon, 24 Sep 2018 17:59:17 +0200
parents 415df0fc4fa1
children
line wrap: on
line source
package org.dive4elements.artifacts.common.utils;

import java.util.Calendar;
import java.util.Date;


public class DateUtils {

    private DateUtils() {
    }


    /**
     * This function extracts the year as int value from <i>date</i>.
     *
     * @param date The source date.
     *
     * @return the year as integer or -1 if date is empty.
     */
    public static int getYearFromDate(final Date date) {
        if (date == null) {
            return -1;
        }

        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        return cal.get(Calendar.YEAR);
    }

    /**
     * Gets the abfluss year (1.11. - 31.10.) a date belongs to
     *
     * @return the abfluss year, or -1
     */
    public static int getAbflussYearFromDate(final Date date) {
        if (date == null)
            return -1;
        final Calendar cal = Calendar.getInstance();
        cal.setTime(getAbflussYear(date)[1]);
        return cal.get(Calendar.YEAR);
    }

    /**
     * Gets the date range of the abfluss year (1.11. - 31.10.) a date belongs to
     *
     * @return [abfluss year start date, abfluss year end date], or null
     */
    public static Date[] getAbflussYear(final Date date) {
        if (date == null)
            return null;
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int qYear = (cal.get(Calendar.MONTH) >= 10) ? cal.get(Calendar.YEAR) + 1 : cal.get(Calendar.YEAR);
        return getAbflussYear(qYear);
    }

    /**
     * Gets the date range of the abfluss year (1.11. - 31.10.) a date belongs to
     *
     * @return [abfluss year start date, abfluss year end date], or null
     */
    public static Date[] getAbflussYear(final int year) {
        final Calendar calStart = Calendar.getInstance();
        calStart.clear();
        calStart.set(year - 1, 10, 1, 0, 0, 0);
        final Calendar calEnd = Calendar.getInstance();
        calEnd.clear();
        calEnd.set(year, 9, 31, 23, 59, 59);
        return new Date[] { calStart.getTime(), calEnd.getTime() };
    }

    /**
     * Gets the date range of the abfluss year following a date, or that of the date itself if it's a nov-1
     *
     * @return [abfluss year start date, abfluss year end date], or null
     */
    public static Date[] getNextAbflussYear(final Date date) {
        if (date == null)
            return null;
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int nextQYear = cal.get(Calendar.YEAR) + 1;
        switch (cal.get(Calendar.MONTH)) {
        case 10:
            if (cal.get(Calendar.DAY_OF_MONTH) >= 2)
                return getAbflussYear(nextQYear + 1);
            break;
        case 11:
            return getAbflussYear(nextQYear + 1);
        default:
            break;
        }
        return getAbflussYear(nextQYear);
    }

    /**
     * Gets the date range of the abfluss year preceeding a date, or that of the date itself if it's a oct-31
     *
     * @return [abfluss year start date, abfluss year end date], or null
     */
    public static Date[] getPreviousAbflussYear(final Date date) {
        if (date == null)
            return null;
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int previousQYear = cal.get(Calendar.YEAR);
        switch (cal.get(Calendar.MONTH)) {
        case 10:
        case 11:
            break;
        case 9:
            if (cal.get(Calendar.DAY_OF_MONTH) <= 30)
                return getAbflussYear(previousQYear - 1);
            break;
        default:
            return getAbflussYear(previousQYear - 1);
        }
        return getAbflussYear(previousQYear);
    }

    /**
     * Gets the date of the new year's day following a date, or the date itself with 0-time if it's a jan-1
     *
     * @return a newyear's date, or null
     */
    public static Date getNextNewYear(final Date date) {
        if (date == null)
            return null;
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int offset = (cal.get(Calendar.DAY_OF_YEAR) == 1) ? 0 : 1;
        cal.set(cal.get(Calendar.YEAR) + offset, 0, 1, 0, 0, 0);
        return cal.getTime();
    }
}

http://dive4elements.wald.intevation.org