[PATCH] Added some methods for Abflussjahr

Wald Commits scm-commit at wald.intevation.org
Mon Sep 24 17:59:40 CEST 2018


# HG changeset patch
# User mschaefer
# Date 1537804757 -7200
# Node ID 1c2ce0501305e6f8586fd8d1e12da1e632b7a54c
# Parent  2b631f788ce1732db9986b8dc7e82c8229f6009b
Added some methods for Abflussjahr

diff -r 2b631f788ce1 -r 1c2ce0501305 artifacts-common/src/main/java/org/dive4elements/artifacts/common/utils/DateUtils.java
--- a/artifacts-common/src/main/java/org/dive4elements/artifacts/common/utils/DateUtils.java	Tue Sep 04 16:44:31 2018 +0200
+++ b/artifacts-common/src/main/java/org/dive4elements/artifacts/common/utils/DateUtils.java	Mon Sep 24 17:59:17 2018 +0200
@@ -17,14 +17,120 @@
      *
      * @return the year as integer or -1 if date is empty.
      */
-    public static int getYearFromDate(Date date) {
+    public static int getYearFromDate(final Date date) {
         if (date == null) {
             return -1;
         }
 
-        Calendar cal = Calendar.getInstance();
+        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();
+    }
 }


More information about the Dive4Elements-commits mailing list