/* * Created on 31-Oct-2004 * * Purpose is to get the date time range to use for a jical calc. */ package org.jical; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Logger; /** * @author sfg * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DateTimeRange { Date dateFrom; Date dateTo; private static final SimpleDateFormat DATEONLY = new SimpleDateFormat("yyyyMMdd"); private static final SimpleDateFormat DATETIME = new SimpleDateFormat("yyyyMMddHHmmss"); private static String CURRENT = "CURRENT"; private Logger logger = Logger.getLogger(this.getClass().getName()); /* * TODO Work out dateFrom dateTo and timeRange. * */ public void calcDateTimeRange(String dateRangeOrDaysForward, String timeRange) { dateFrom = null; dateTo = null; // Allow CURRENT to fetch all calendar details up to today. if (dateRangeOrDaysForward.equalsIgnoreCase(CURRENT)) { dateFrom = new Date(1); dateTo = new Date(); } else // Check for a range if (dateRangeOrDaysForward.indexOf("-") != -1) { try { dateFrom = getDateFrom(dateRangeOrDaysForward); dateFrom = getDateTo(dateRangeOrDaysForward); } catch (Exception e) { logger.severe("Cannot read your datefrom/to parameter! RTFM. 14chars - 14 chars, exception:"+e); dateFrom = null; dateTo = null; } } else // Assume a 'days forward'. { long daysForward = getDaysForwardNumeric(dateRangeOrDaysForward); calcDateRangeFromDaysForward(daysForward); } } public long getDaysForwardNumeric(String dateRangeOrDaysForward) { try { return java.lang.Integer.parseInt(dateRangeOrDaysForward); } catch (Exception e) { e.printStackTrace(); logger.severe("Really bad days forward parameter of "+dateRangeOrDaysForward+" caused exception: "+e); // Allow proceed but with zero days forward. return 0; } } private void calcDateRangeFromDaysForward(long daysForward) { Date dateFrom = new Date(); Date dateTo = getDateToFromDaysForward(daysForward); /* * Currently, keep this dateFrom/To as coarse. ie, dateFrom/To are DAYS not DAY/HH:MM * ie for FROM date, set to time of 0000, for TO date set to time of 235959 */ try { dateFrom = (Date)DATEONLY.parse(DATEONLY.format(dateFrom)); dateTo = (Date)DATETIME.parse(DATEONLY.format(dateTo) + "235959"); } catch (Exception e) { logger.severe("Error setting dates to process full day range." + e); } } public Date getDateToFromDaysForward(long daysForward) { Date dateTo = new Date(); long rollMicroSecs = 86400000 * daysForward; dateTo.setTime(dateTo.getTime() + (rollMicroSecs)); return dateTo; } /* * This is not the optimal place for this but it works! * */ public Date getDateFrom(String dateRangeOrDaysForward) throws Exception { try { return (Date)DATETIME.parse(dateRangeOrDaysForward.substring(0,14)); } catch (Exception e) { throw e; } } public Date getDateTo(String dateRangeOrDaysForward) throws Exception { // Gets the From Date try { return (Date)DATETIME.parse(dateRangeOrDaysForward.substring(15)); } catch (Exception e) { throw e; } } }