You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2012/08/01 20:11:10 UTC

svn commit: r1368151 - /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/util/DateTime.java

Author: prestonc
Date: Wed Aug  1 18:11:09 2012
New Revision: 1368151

URL: http://svn.apache.org/viewvc?rev=1368151&view=rev
Log:
Added a date validate function.

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/util/DateTime.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/util/DateTime.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/util/DateTime.java?rev=1368151&r1=1368150&r2=1368151&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/util/DateTime.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/util/DateTime.java Wed Aug  1 18:11:09 2012
@@ -36,10 +36,10 @@ public class DateTime {
             59999 // millisecond
     };
 
-    public static final int TIMEZONE_HOUR_MIN = -12, TIMEZONE_HOUR_MAX = 14, TIMEZONE_MIN_MIN = -60,
-            TIMEZONE_MIN_MAX = 60;
+    public static final int TIMEZONE_HOUR_MIN = -12, TIMEZONE_HOUR_MAX = 14, TIMEZONE_MINUTE_MIN = -60,
+            TIMEZONE_MINUTE_MAX = 60;
     // Used to store the timezone value when one does not exist.
-    public static final byte TIMEZONE_HOUR_NULL = 127, TIMEZONE_MIN_NULL = 127;
+    public static final byte TIMEZONE_HOUR_NULL = 127, TIMEZONE_MINUTE_NULL = 127;
 
     public static final int YEAR_FIELD_INDEX = 0, MONTH_FIELD_INDEX = 1, DAY_FIELD_INDEX = 2, HOUR_FIELD_INDEX = 3,
             MINUTE_FIELD_INDEX = 4, MILLISECOND_FIELD_INDEX = 5;
@@ -55,6 +55,48 @@ public class DateTime {
     }
 
     /**
+     * Check whether a given year is a leap year.
+     * 
+     * @param year
+     * @return
+     */
+    public static boolean valid(long year, long month, long day, long hour, long minute, long millisecond,
+            long timezoneHour, long timezoneMinute) {
+        if (year > FIELD_MAXS[DateTime.YEAR_FIELD_INDEX] || year < FIELD_MINS[DateTime.YEAR_FIELD_INDEX]) {
+            return false;
+        }
+        long[] monthCheck = DAYS_OF_MONTH_ORDI;
+        if (isLeapYear(year)) {
+            monthCheck = DAYS_OF_MONTH_LEAP;
+        }
+        if (month > FIELD_MAXS[DateTime.MONTH_FIELD_INDEX] || month < FIELD_MINS[DateTime.MONTH_FIELD_INDEX]) {
+            return false;
+        }
+        if (day > FIELD_MAXS[DateTime.DAY_FIELD_INDEX] || day < monthCheck[(int) (month - 1)]) {
+            return false;
+        }
+        if (hour > FIELD_MAXS[DateTime.HOUR_FIELD_INDEX] || hour < FIELD_MINS[DateTime.HOUR_FIELD_INDEX]) {
+            return false;
+        }
+        if (minute > FIELD_MAXS[DateTime.MINUTE_FIELD_INDEX] || minute < FIELD_MINS[DateTime.MINUTE_FIELD_INDEX]) {
+            return false;
+        }
+        if (millisecond > FIELD_MAXS[DateTime.MILLISECOND_FIELD_INDEX]
+                || millisecond < FIELD_MINS[DateTime.MILLISECOND_FIELD_INDEX]) {
+            return false;
+        }
+        if ((timezoneHour > FIELD_MAXS[DateTime.HOUR_FIELD_INDEX] && timezoneHour != TIMEZONE_HOUR_NULL)
+                || (timezoneHour < FIELD_MINS[DateTime.HOUR_FIELD_INDEX] && timezoneHour != TIMEZONE_HOUR_NULL)) {
+            return false;
+        }
+        if ((timezoneHour > FIELD_MAXS[DateTime.MINUTE_FIELD_INDEX] && timezoneHour != TIMEZONE_MINUTE_NULL)
+                || (timezoneHour < FIELD_MINS[DateTime.MINUTE_FIELD_INDEX] && timezoneHour != TIMEZONE_MINUTE_NULL)) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
      * Return a normalized time.
      */
     public static void normalizeDateTime(long yearMonth, long dayTime, DataOutput dOut) throws IOException {
@@ -103,7 +145,7 @@ public class DateTime {
         dOut.writeByte((byte) minute);
         dOut.writeInt((int) millisecond);
         dOut.writeByte((byte) DateTime.TIMEZONE_HOUR_NULL);
-        dOut.writeByte((byte) DateTime.TIMEZONE_MIN_NULL);
+        dOut.writeByte((byte) DateTime.TIMEZONE_MINUTE_NULL);
     }
 
     public static void getTimezoneDateTime(ITimezone timezonep, DynamicContext dCtx, DataOutput dOut)
@@ -112,7 +154,7 @@ public class DateTime {
         long timezoneMinute;
         // Consider time zones.
         if (timezonep.getTimezoneHour() == DateTime.TIMEZONE_HOUR_NULL
-                || timezonep.getTimezoneMinute() == DateTime.TIMEZONE_MIN_NULL) {
+                || timezonep.getTimezoneMinute() == DateTime.TIMEZONE_MINUTE_NULL) {
             XSDateTimePointable defaultTimezone = new XSDateTimePointable();
             dCtx.getCurrentDateTime(defaultTimezone);
             timezoneHour = defaultTimezone.getTimezoneHour();