teichmann@475: package org.dive4elements.artifacts.common.utils; ingo@389: ingo@389: import java.util.Calendar; ingo@389: import java.util.Date; ingo@389: ingo@389: ingo@389: public class DateUtils { ingo@389: ingo@389: private DateUtils() { ingo@389: } ingo@389: ingo@389: ingo@389: /** ingo@389: * This function extracts the year as int value from date. ingo@389: * ingo@389: * @param date The source date. ingo@389: * ingo@389: * @return the year as integer or -1 if date is empty. ingo@389: */ mschaefer@561: public static int getYearFromDate(final Date date) { ingo@389: if (date == null) { ingo@389: return -1; ingo@389: } ingo@389: mschaefer@561: final Calendar cal = Calendar.getInstance(); ingo@389: cal.setTime(date); ingo@389: ingo@389: return cal.get(Calendar.YEAR); ingo@389: } mschaefer@561: mschaefer@561: /** mschaefer@561: * Gets the abfluss year (1.11. - 31.10.) a date belongs to mschaefer@561: * mschaefer@561: * @return the abfluss year, or -1 mschaefer@561: */ mschaefer@561: public static int getAbflussYearFromDate(final Date date) { mschaefer@561: if (date == null) mschaefer@561: return -1; mschaefer@561: final Calendar cal = Calendar.getInstance(); mschaefer@561: cal.setTime(getAbflussYear(date)[1]); mschaefer@561: return cal.get(Calendar.YEAR); mschaefer@561: } mschaefer@561: mschaefer@561: /** mschaefer@561: * Gets the date range of the abfluss year (1.11. - 31.10.) a date belongs to mschaefer@561: * mschaefer@561: * @return [abfluss year start date, abfluss year end date], or null mschaefer@561: */ mschaefer@561: public static Date[] getAbflussYear(final Date date) { mschaefer@561: if (date == null) mschaefer@561: return null; mschaefer@561: final Calendar cal = Calendar.getInstance(); mschaefer@561: cal.setTime(date); mschaefer@561: final int qYear = (cal.get(Calendar.MONTH) >= 10) ? cal.get(Calendar.YEAR) + 1 : cal.get(Calendar.YEAR); mschaefer@561: return getAbflussYear(qYear); mschaefer@561: } mschaefer@561: mschaefer@561: /** mschaefer@561: * Gets the date range of the abfluss year (1.11. - 31.10.) a date belongs to mschaefer@561: * mschaefer@561: * @return [abfluss year start date, abfluss year end date], or null mschaefer@561: */ mschaefer@561: public static Date[] getAbflussYear(final int year) { mschaefer@561: final Calendar calStart = Calendar.getInstance(); mschaefer@561: calStart.clear(); mschaefer@561: calStart.set(year - 1, 10, 1, 0, 0, 0); mschaefer@561: final Calendar calEnd = Calendar.getInstance(); mschaefer@561: calEnd.clear(); mschaefer@561: calEnd.set(year, 9, 31, 23, 59, 59); mschaefer@561: return new Date[] { calStart.getTime(), calEnd.getTime() }; mschaefer@561: } mschaefer@561: mschaefer@561: /** mschaefer@561: * Gets the date range of the abfluss year following a date, or that of the date itself if it's a nov-1 mschaefer@561: * mschaefer@561: * @return [abfluss year start date, abfluss year end date], or null mschaefer@561: */ mschaefer@561: public static Date[] getNextAbflussYear(final Date date) { mschaefer@561: if (date == null) mschaefer@561: return null; mschaefer@561: final Calendar cal = Calendar.getInstance(); mschaefer@561: cal.setTime(date); mschaefer@561: final int nextQYear = cal.get(Calendar.YEAR) + 1; mschaefer@561: switch (cal.get(Calendar.MONTH)) { mschaefer@561: case 10: mschaefer@561: if (cal.get(Calendar.DAY_OF_MONTH) >= 2) mschaefer@561: return getAbflussYear(nextQYear + 1); mschaefer@561: break; mschaefer@561: case 11: mschaefer@561: return getAbflussYear(nextQYear + 1); mschaefer@561: default: mschaefer@561: break; mschaefer@561: } mschaefer@561: return getAbflussYear(nextQYear); mschaefer@561: } mschaefer@561: mschaefer@561: /** mschaefer@561: * Gets the date range of the abfluss year preceeding a date, or that of the date itself if it's a oct-31 mschaefer@561: * mschaefer@561: * @return [abfluss year start date, abfluss year end date], or null mschaefer@561: */ mschaefer@561: public static Date[] getPreviousAbflussYear(final Date date) { mschaefer@561: if (date == null) mschaefer@561: return null; mschaefer@561: final Calendar cal = Calendar.getInstance(); mschaefer@561: cal.setTime(date); mschaefer@561: final int previousQYear = cal.get(Calendar.YEAR); mschaefer@561: switch (cal.get(Calendar.MONTH)) { mschaefer@561: case 10: mschaefer@561: case 11: mschaefer@561: break; mschaefer@561: case 9: mschaefer@561: if (cal.get(Calendar.DAY_OF_MONTH) <= 30) mschaefer@561: return getAbflussYear(previousQYear - 1); mschaefer@561: break; mschaefer@561: default: mschaefer@561: return getAbflussYear(previousQYear - 1); mschaefer@561: } mschaefer@561: return getAbflussYear(previousQYear); mschaefer@561: } mschaefer@561: mschaefer@561: /** mschaefer@561: * 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 mschaefer@561: * mschaefer@561: * @return a newyear's date, or null mschaefer@561: */ mschaefer@561: public static Date getNextNewYear(final Date date) { mschaefer@561: if (date == null) mschaefer@561: return null; mschaefer@561: final Calendar cal = Calendar.getInstance(); mschaefer@561: cal.setTime(date); mschaefer@561: final int offset = (cal.get(Calendar.DAY_OF_YEAR) == 1) ? 0 : 1; mschaefer@561: cal.set(cal.get(Calendar.YEAR) + offset, 0, 1, 0, 0, 0); mschaefer@561: return cal.getTime(); mschaefer@561: } ingo@389: }