summaryrefslogtreecommitdiffstats
path: root/petascope/src/petascope/wcs/server/core/TimeString.java
diff options
context:
space:
mode:
Diffstat (limited to 'petascope/src/petascope/wcs/server/core/TimeString.java')
-rw-r--r--petascope/src/petascope/wcs/server/core/TimeString.java223
1 files changed, 223 insertions, 0 deletions
diff --git a/petascope/src/petascope/wcs/server/core/TimeString.java b/petascope/src/petascope/wcs/server/core/TimeString.java
new file mode 100644
index 0000000..668614e
--- /dev/null
+++ b/petascope/src/petascope/wcs/server/core/TimeString.java
@@ -0,0 +1,223 @@
+/*
+ * This file is part of PetaScope.
+ *
+ * PetaScope is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * PetaScope is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with PetaScope. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * For more information please see <http://www.PetaScope.org>
+ * or contact Peter Baumann via <baumann@rasdaman.com>.
+ *
+ * Copyright 2009 Jacobs University Bremen, Peter Baumann.
+ */
+package petascope.wcs.server.core;
+
+//~--- non-JDK imports --------------------------------------------------------
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import org.joda.time.format.ISODateTimeFormat;
+
+/**
+ * Represents a Time object, according to ISO 8601, and utility methods.
+ *
+ * @author Gulius Caesar
+ */
+public class TimeString {
+
+ private static DateTimeFormatter DTF = ISODateTimeFormat.dateTime();
+ private DateTime dateTime;
+ private long milliseconds;
+ private String strTime;
+
+ /* Default constructor */
+ public TimeString(String timeStr) throws IllegalArgumentException {
+ strTime = timeStr;
+ dateTime = parse(strTime);
+ milliseconds = parseMillis(strTime);
+ }
+
+ public DateTime getDateTime() {
+ return dateTime;
+ }
+
+ public long getMilliseconds() {
+ return milliseconds;
+ }
+
+ public long subtract(String newString) throws IllegalArgumentException {
+ long newD = parseMillis(newString);
+ long res = milliseconds - newD;
+
+ return res;
+ }
+
+ public double divide(String newString) throws IllegalArgumentException {
+ long newD = parseMillis(newString);
+ double result = milliseconds * new Double(1.0) / newD;
+
+ return result;
+ }
+
+ /** ******************** Static methods ***************** */
+
+ /*
+ * Subtraction Method, calculates the difference in milliseconds between two dates
+ */
+ public static long difference(String bigDate, String smallDate) throws IllegalArgumentException {
+ long smallD = parseMillis(smallDate);
+ long bigD = parseMillis(bigDate);
+ long result = bigD - smallD;
+
+ return result;
+ }
+
+ /**
+ * Division of one Date by the other.
+ */
+ public static double division(String IAmDivided, String IDivide) throws IllegalArgumentException {
+ long iad = parseMillis(IAmDivided);
+ long id = parseMillis(IDivide);
+ double result = iad * new Double(1.0) / id;
+
+ return result;
+ }
+
+ /*
+ * Division of a millisecond-Date-respresentation by a number.
+ */
+ public static double division(String InputDate, long Divisor) throws IllegalArgumentException {
+ long ID = parseMillis(InputDate);
+
+ double result = ID * new Double(1.0) / Divisor;
+
+ return result;
+
+ }
+
+ /**
+ * Date to millisecond parser. Accepts the standard ISO 8601 + shorter codes.
+ * @return long number of miliseconds
+ */
+ public static long parseMillis(String TString) throws IllegalArgumentException {
+ long Millis;
+ int NumberOfSymbols = TString.length();
+
+ switch (NumberOfSymbols) {
+ case 24:
+ DTF = ISODateTimeFormat.dateTime();
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 22:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SS");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 19:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 16:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 13:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 10:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 7:
+ DTF = DateTimeFormat.forPattern("yyyy-MM");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ case 4:
+ DTF = DateTimeFormat.forPattern("yyyy");
+ Millis = DTF.parseMillis(TString);
+
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown DateTime format.");
+ }
+
+ return Millis;
+ }
+
+ /**
+ *
+ * @param TString string containing date
+ * @return joda DateTime corresponding to the input string
+ * @throws IllegalArgumentException
+ */
+ public static DateTime parse(String str) throws IllegalArgumentException {
+ DateTime date;
+ int NumberOfSymbols = str.length();
+
+ System.out.println("Parsing date '" + str + "', with length " + str.length());
+
+ switch (NumberOfSymbols) {
+ case 24:
+ DTF = ISODateTimeFormat.dateTime();
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 22:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SS");
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 19:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 16:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm");
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 13:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH");
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 10:
+ DTF = DateTimeFormat.forPattern("yyyy-MM-dd");
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 7:
+ DTF = DateTimeFormat.forPattern("yyyy-MM");
+ date = DTF.parseDateTime(str);
+
+ break;
+ case 4:
+ DTF = DateTimeFormat.forPattern("yyyy");
+ date = DTF.parseDateTime(str);
+
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown DateTime format.");
+ }
+
+ return date;
+ }
+}