001: /*
002: * Created on 31-Oct-2004
003: *
004: * Purpose is to get the date time range to use for a jical calc.
005: */
006: package org.jical;
007:
008: import java.text.SimpleDateFormat;
009: import java.util.Date;
010: import java.util.logging.Logger;
011:
012: /**
013: * @author sfg
014: *
015: * TODO To change the template for this generated type comment go to
016: * Window - Preferences - Java - Code Style - Code Templates
017: */
018: public class DateTimeRange {
019: Date dateFrom;
020: Date dateTo;
021: private static final SimpleDateFormat DATEONLY = new SimpleDateFormat(
022: "yyyyMMdd");
023: private static final SimpleDateFormat DATETIME = new SimpleDateFormat(
024: "yyyyMMddHHmmss");
025: private static String CURRENT = "CURRENT";
026:
027: private Logger logger = Logger.getLogger(this .getClass().getName());
028:
029: /*
030: * TODO Work out dateFrom dateTo and timeRange.
031: *
032: */
033: public void calcDateTimeRange(String dateRangeOrDaysForward,
034: String timeRange) {
035: dateFrom = null;
036: dateTo = null;
037:
038: // Allow CURRENT to fetch all calendar details up to today.
039: if (dateRangeOrDaysForward.equalsIgnoreCase(CURRENT)) {
040: dateFrom = new Date(1);
041: dateTo = new Date();
042: } else
043: // Check for a range
044: if (dateRangeOrDaysForward.indexOf("-") != -1) {
045: try {
046: dateFrom = getDateFrom(dateRangeOrDaysForward);
047: dateFrom = getDateTo(dateRangeOrDaysForward);
048: } catch (Exception e) {
049: logger
050: .severe("Cannot read your datefrom/to parameter! RTFM. 14chars - 14 chars, exception:"
051: + e);
052: dateFrom = null;
053: dateTo = null;
054: }
055:
056: } else // Assume a 'days forward'.
057: {
058: long daysForward = getDaysForwardNumeric(dateRangeOrDaysForward);
059: calcDateRangeFromDaysForward(daysForward);
060: }
061: }
062:
063: public long getDaysForwardNumeric(String dateRangeOrDaysForward) {
064: try {
065: return java.lang.Integer.parseInt(dateRangeOrDaysForward);
066: } catch (Exception e) {
067: e.printStackTrace();
068: logger.severe("Really bad days forward parameter of "
069: + dateRangeOrDaysForward + " caused exception: "
070: + e);
071: // Allow proceed but with zero days forward.
072: return 0;
073: }
074:
075: }
076:
077: private void calcDateRangeFromDaysForward(long daysForward) {
078: Date dateFrom = new Date();
079: Date dateTo = getDateToFromDaysForward(daysForward);
080: /*
081: * Currently, keep this dateFrom/To as coarse. ie, dateFrom/To are DAYS not DAY/HH:MM
082: * ie for FROM date, set to time of 0000, for TO date set to time of 235959
083: */
084: try {
085: dateFrom = (Date) DATEONLY.parse(DATEONLY.format(dateFrom));
086: dateTo = (Date) DATETIME.parse(DATEONLY.format(dateTo)
087: + "235959");
088: } catch (Exception e) {
089: logger
090: .severe("Error setting dates to process full day range."
091: + e);
092: }
093: }
094:
095: public Date getDateToFromDaysForward(long daysForward) {
096: Date dateTo = new Date();
097: long rollMicroSecs = 86400000 * daysForward;
098: dateTo.setTime(dateTo.getTime() + (rollMicroSecs));
099: return dateTo;
100: }
101:
102: /*
103: * This is not the optimal place for this but it works!
104: *
105: */
106: public Date getDateFrom(String dateRangeOrDaysForward)
107: throws Exception {
108: try {
109: return (Date) DATETIME.parse(dateRangeOrDaysForward
110: .substring(0, 14));
111: } catch (Exception e) {
112: throw e;
113: }
114: }
115:
116: public Date getDateTo(String dateRangeOrDaysForward)
117: throws Exception {
118: // Gets the From Date
119: try {
120: return (Date) DATETIME.parse(dateRangeOrDaysForward
121: .substring(15));
122: } catch (Exception e) {
123: throw e;
124: }
125: }
126: }
|