package com.spun.util.parser; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; import com.spun.util.DateDifference; import com.spun.util.DateUtils; import com.spun.util.StringUtils; public class TemplateDate { public static final TemplateDate INSTANCE = new TemplateDate(); public static final class FORMATS { public static final DateFormat DATE_SHORT_DAY = new SimpleDateFormat("EEE MM/dd/yyyy"); public static final DateFormat DATE_MONTH_YEAR = new SimpleDateFormat("MM/yy"); public static final DateFormat DATE_MONTH_DAY = new SimpleDateFormat("MM/dd"); public static final DateFormat DATE_SHORT = new SimpleDateFormat("MM/dd/yyyy"); public static final DateFormat DATE_MEDIUM = DateFormat.getDateInstance(DateFormat.MEDIUM); public static final DateFormat DATE_LONG = DateFormat.getDateInstance(DateFormat.LONG); public static final DateFormat DATE_FULL = DateFormat.getDateInstance(DateFormat.FULL); public static final DateFormat TIME_SHORT = DateFormat.getTimeInstance(DateFormat.SHORT); public static final DateFormat TIME_FULL = new SimpleDateFormat("H:mm"); public static final DateFormat TIME_ZONE = new SimpleDateFormat("H:mm z"); public static final DateFormat TIME_MILLI = new SimpleDateFormat("H:mm:ss:SSS"); } //private static DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.FULL ,DateFormat.SHORT); private Date frozen = null; private DateDifference difference = null; /************************************************************************/ public TemplateDate() { } /************************************************************************/ public TemplateDate(Date freezeTime) { this.frozen = freezeTime; } /************************************************************************/ public void freezeTime() { frozen = new Date(); } /***********************************************************************/ public String getDate(String style) { return getDate(style, ""); } /***********************************************************************/ public String getDate(String style, String zone) { String value = null; DateFormat formatter = null; if (style.equalsIgnoreCase("FULL")) { formatter = FORMATS.DATE_FULL; } else if (style.equalsIgnoreCase("LONG")) { formatter = FORMATS.DATE_LONG; } else if (style.equalsIgnoreCase("MEDIUM")) { formatter = FORMATS.DATE_MEDIUM; } else if (style.equalsIgnoreCase("SHORTDAY")) { formatter = FORMATS.DATE_SHORT_DAY; } else if (style.equalsIgnoreCase("MonthYear")) { formatter = FORMATS.DATE_MONTH_YEAR; } else if (style.equalsIgnoreCase("MonthDay")) { formatter = FORMATS.DATE_MONTH_DAY; } else { formatter = FORMATS.DATE_SHORT; } formatter.setTimeZone((StringUtils.isNonZero(zone)) ? TimeZone.getTimeZone(zone) : TimeZone.getDefault()); value = formatter.format(getDate(false)); return value; } /***********************************************************************/ public String getTime(String format) { return getTime(format, ""); } /***********************************************************************/ public String getTime(String format, String zone) { String value = null; DateFormat formatter = null; if (format.equalsIgnoreCase("AM/PM")) { formatter = FORMATS.TIME_SHORT; } else if (format.equalsIgnoreCase("Milli")) { formatter = FORMATS.TIME_MILLI; } else if (format.equalsIgnoreCase("Zone")) { formatter = FORMATS.TIME_ZONE; } else { formatter = FORMATS.TIME_FULL; } formatter.setTimeZone((StringUtils.isNonZero(zone)) ? TimeZone.getTimeZone(zone) : TimeZone.getDefault()); value = formatter.format(getDate(false)); return value; } /************************************************************************/ public Date getDate(boolean forceCurrent) { if ((frozen != null) && (!forceCurrent)) { return frozen; } else { return new Date(); } } /************************************************************************/ public Date getDate() { return getDate(false); } /***********************************************************************/ public DateDifference getDifferenceFromToday() { if (difference == null) { difference = new DateDifference(getDate(false), new Date()); } return difference; } /***********************************************************************/ public String getDay() { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(getDate(false)); return StringUtils.padNumber(cal.get(Calendar.DAY_OF_MONTH), 2); } /***********************************************************************/ public String getMonth(int offset) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(getDate(false)); return StringUtils.padNumber(cal.get(Calendar.MONTH) + offset, 2); } /***********************************************************************/ public String getMonthName() { return new SimpleDateFormat("MMMM").format(getDate(false)); } /***********************************************************************/ public String getYear() { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(getDate(false)); return StringUtils.padNumber(cal.get(Calendar.YEAR), 4); } /***********************************************************************/ public boolean isToday() { return DateUtils.isToday(getDate(false)); } /***********************************************************************/ public String toString() { return this.getDate("", ""); } /***********************************************************************/ public String getDateAndTime(String dateFormat, String timeFormat) { return getDate(dateFormat) + " " + getTime(timeFormat); } /***********************************************************************/ public String getDateAndTime() { return getDateAndTime("default", "default"); } /************************************************************************/ /************************************************************************/ }