| | |
| | | import java.util.Calendar;
|
| | | import java.util.Date;
|
| | | import java.util.ResourceBundle;
|
| | | import java.util.TimeZone;
|
| | |
|
| | | /**
|
| | | * Utility class of time functions.
|
| | | * |
| | | *
|
| | | * @author James Moger
|
| | | * |
| | | *
|
| | | */
|
| | | public class TimeUtils {
|
| | | public static final long MIN = 1000 * 60L;
|
| | |
| | | public static final long ONEDAY = ONEHOUR * 24L;
|
| | |
|
| | | public static final long ONEYEAR = ONEDAY * 365L;
|
| | | |
| | |
|
| | | private final ResourceBundle translation;
|
| | | |
| | |
|
| | | private final TimeZone timezone;
|
| | |
|
| | | public TimeUtils() {
|
| | | this(null);
|
| | | this(null, null);
|
| | | }
|
| | | |
| | | public TimeUtils(ResourceBundle translation) {
|
| | |
|
| | | public TimeUtils(ResourceBundle translation, TimeZone timezone) {
|
| | | this.translation = translation;
|
| | | this.timezone = timezone;
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns true if date is today.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @return true if date is today
|
| | | */
|
| | | public static boolean isToday(Date date) {
|
| | | return (System.currentTimeMillis() - date.getTime()) < ONEDAY;
|
| | | public static boolean isToday(Date date, TimeZone timezone) {
|
| | | Date now = new Date();
|
| | | SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
|
| | | if (timezone != null) {
|
| | | df.setTimeZone(timezone);
|
| | | }
|
| | | return df.format(now).equals(df.format(date));
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns true if date is yesterday.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @return true if date is yesterday
|
| | | */
|
| | | public static boolean isYesterday(Date date) {
|
| | | public static boolean isYesterday(Date date, TimeZone timezone) {
|
| | | Calendar cal = Calendar.getInstance();
|
| | | cal.setTime(new Date());
|
| | | cal.add(Calendar.DATE, -1);
|
| | | SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
|
| | | if (timezone != null) {
|
| | | df.setTimeZone(timezone);
|
| | | }
|
| | | return df.format(cal.getTime()).equals(df.format(date));
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the string representation of the duration as days, months and/or
|
| | | * years.
|
| | | * |
| | | *
|
| | | * @param days
|
| | | * @return duration as string in days, months, and/or years
|
| | | */
|
| | |
| | | /**
|
| | | * Returns the number of minutes ago between the start time and the end
|
| | | * time.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @param endTime
|
| | | * @param roundup
|
| | |
| | |
|
| | | /**
|
| | | * Return the difference in minutes between now and the date.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @param roundup
|
| | | * @return minutes ago
|
| | |
| | |
|
| | | /**
|
| | | * Return the difference in hours between now and the date.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @param roundup
|
| | | * @return hours ago
|
| | |
| | |
|
| | | /**
|
| | | * Return the difference in days between now and the date.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @return days ago
|
| | | */
|
| | |
| | | /**
|
| | | * Returns the string representation of the duration between now and the
|
| | | * date.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @return duration as a string
|
| | | */
|
| | |
| | |
|
| | | /**
|
| | | * Returns the CSS class for the date based on its age from Now.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @return the css class
|
| | | */
|
| | |
| | | /**
|
| | | * Returns the string representation of the duration OR the css class for
|
| | | * the duration.
|
| | | * |
| | | *
|
| | | * @param date
|
| | | * @param css
|
| | | * @return the string representation of the duration OR the css class
|
| | | */
|
| | | private String timeAgo(Date date, boolean css) {
|
| | | if (isToday(date) || isYesterday(date)) {
|
| | | if (isToday(date, timezone) || isYesterday(date, timezone)) {
|
| | | int mins = minutesAgo(date, true);
|
| | | if (mins >= 120) {
|
| | | if (css) {
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | |
| | |
|
| | | public String inFuture(Date date) {
|
| | | long diff = date.getTime() - System.currentTimeMillis();
|
| | | if (diff > ONEDAY) {
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | |
| | |
|
| | | private String translate(String key, String defaultValue) {
|
| | | String value = defaultValue;
|
| | | if (translation != null && translation.containsKey(key)) {
|
| | |
| | | }
|
| | | return value;
|
| | | }
|
| | | |
| | |
|
| | | private String translate(int val, String key, String defaultPattern) {
|
| | | String pattern = defaultPattern;
|
| | | if (translation != null && translation.containsKey(key)) {
|
| | |
| | |
|
| | | /**
|
| | | * Convert a frequency string into minutes.
|
| | | * |
| | | *
|
| | | * @param frequency
|
| | | * @param minimumMins
|
| | | * @return minutes
|
| | | */
|
| | | public static int convertFrequencyToMinutes(String frequency) {
|
| | | public static int convertFrequencyToMinutes(String frequency, int minimumMins) {
|
| | | // parse the frequency
|
| | | frequency = frequency.toLowerCase();
|
| | | int mins = 60;
|
| | | int mins = minimumMins;
|
| | | if (!StringUtils.isEmpty(frequency)) {
|
| | | try {
|
| | | String str = frequency.trim();
|
| | |
| | | mins = (int) Float.parseFloat(str);
|
| | | } catch (NumberFormatException e) {
|
| | | }
|
| | | if (mins < 5) {
|
| | | mins = 5;
|
| | | if (mins < minimumMins) {
|
| | | mins = minimumMins;
|
| | | }
|
| | | }
|
| | | if (frequency.indexOf("day") > -1) {
|
| | | // convert to minutes
|
| | | mins *= 1440;
|
| | | } else if (frequency.indexOf("hour") > -1) {
|
| | | // convert to minutes
|
| | | mins *= 60;
|
| | | if (frequency.indexOf("day") > -1) {
|
| | | // convert to minutes
|
| | | mins *= 1440;
|
| | | } else if (frequency.indexOf("hour") > -1) {
|
| | | // convert to minutes
|
| | | mins *= 60;
|
| | | }
|
| | | }
|
| | | return mins;
|
| | | }
|