Package com.dotmarketing.util

Source Code of com.dotmarketing.util.DateUtil

package com.dotmarketing.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Locale;

import com.dotmarketing.cms.factories.PublicCompanyFactory;
import com.liferay.portal.language.LanguageUtil;
import com.liferay.portal.model.Company;

public class DateUtil {

  public static final String DIFF_YEARS = "diffYears";
  public static final String DIFF_MONTHS = "diffMonths";
  public static final String DIFF_DAYS = "diffDays";
  public static final String DIFF_HOURS = "diffHours";
  public static final String DIFF_MINUTES = "diffMinutes";

  /**
   * This method allows you to add to a java.util.Date returning a Date
   * instead of void like the Calendar does
   *
   * @param date
   *            The date to modify
   * @param calendarField
   *            The static field from java.util.Calendar to add
   * @param numberToAdd
   *            The number to add
   * @return Date
   */
  public static Date addDate(Date date, int calendarField, int numberToAdd) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.add(calendarField, numberToAdd);
    return c.getTime();
  }

  /**
   * This method will set the time on a date to 00:00:00
   *
   * @param date
   * @return Date
   */
  public static Date minTime(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.AM_PM, Calendar.AM);
    return c.getTime();
  }

  /**
   * This method will set the time on a date to 23:59:59
   *
   * @param date
   * @return Date
   */
  public static Date maxTime(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR, 11);
    c.set(Calendar.MINUTE, 59);
    c.set(Calendar.SECOND, 59);
    c.set(Calendar.AM_PM, Calendar.PM);
    return c.getTime();
  }

  /**
   * This method will return the diff between to dates
   *
   * @param from
   *            Date
   * @param to
   *            Date
   * @return HashMap
   */
  public static HashMap<String, Long> diffDates(Date from, Date to) {
    HashMap<String, Long> result = new HashMap<String, Long>(8);
    try {
      Calendar toCal = new GregorianCalendar();
      toCal.setTime(to);
      Calendar fromCal = new GregorianCalendar();
      fromCal.setTime(from);
      long diffYears = 0;
      long diffMonths = -1;
      int fromMonth = fromCal.get(Calendar.MONTH);
      int currentMonth;
      for (; fromCal.before(toCal);) {
        fromCal.add(Calendar.MONTH, 1);
        ++diffMonths;
        currentMonth = fromCal.get(Calendar.MONTH);
        if (currentMonth == fromMonth)
          ++diffYears;
      }

      result.put(DIFF_YEARS, diffYears);
      result.put(DIFF_MONTHS, diffMonths);

      long milliSecondDiff = to.getTime() - from.getTime();
      long diffDays = milliSecondDiff / (24 * 3600 * 1000);
      long diffHours = milliSecondDiff / (3600 * 1000);
      long timeLeft = milliSecondDiff % (3600 * 1000);
      long diffMinutes = timeLeft / (60 * 1000);

      result.put(DIFF_DAYS, diffDays);
      result.put(DIFF_HOURS, diffHours);
      result.put(DIFF_MINUTES, diffMinutes);
    } catch (Exception e) {
      Logger.warn(DateUtil.class, e.toString());
    }
    return result;
  }

  /**
   * This method try to parse a string into a Date object using an array with
   * the valid formats
   *
   * @param date
   *            the string to be parsed
   * @param formats
   *            the valid format to parse the string
   * @return return the Date object that represent the string
   * @throws java.text.ParseException
   */

  public static Date convertDate(String date, String[] formats) throws java.text.ParseException {
    Date ret = null;
    for (String pattern : formats) {
      try {
        ret = new SimpleDateFormat(pattern).parse(date);
        break;
      } catch (java.text.ParseException e) {
      }
    }
    if (ret == null)
      throw new java.text.ParseException(date, 0);

    return ret;
  }

  /**
   * This method takes a Date and the desired format to convert it to a String
   */
  public static String formatDate(Date date, String format) {
    return new SimpleDateFormat(format).format(date);
  }

  public static String prettyDateSince(Date date, Locale locale) {

    if (locale == null) {
      Company company = PublicCompanyFactory.getDefaultCompany();
      locale = company.getLocale();
    }
    String sinceMessage = null;
    SimpleDateFormat sdf = new SimpleDateFormat("h:mm aa, MMMM d?, yyyy", locale);
    String modDate = sdf.format(date);
    modDate = modDate.replaceAll("\\?", "th");
    try {

      HashMap<String, Long> diffDates = DateUtil.diffDates(date, new Date());
      if (0 < diffDates.get(DateUtil.DIFF_YEARS)) {
        sinceMessage = LanguageUtil.get(locale, "more-than-a-year-ago");
      } else if (1 < diffDates.get(DateUtil.DIFF_MONTHS)) {
        sinceMessage = LanguageUtil.format(locale, "x-months-ago", diffDates.get(DateUtil.DIFF_MONTHS), false);

      } else if (1 == diffDates.get(DateUtil.DIFF_MONTHS)) {
        sinceMessage = LanguageUtil.get(locale, "last-month");

      } else if (13 < diffDates.get(DateUtil.DIFF_DAYS)) {
        sinceMessage =
            LanguageUtil.format(locale, "x-weeks-ago", new Double(Math.floor(diffDates.get(DateUtil.DIFF_DAYS) / 7)).intValue());

      } else if (6 < diffDates.get(DateUtil.DIFF_DAYS)) {
        sinceMessage = LanguageUtil.get(locale, "last-week");

      } else if (1 < diffDates.get(DateUtil.DIFF_DAYS)) {
        sinceMessage = LanguageUtil.format(locale, "x-days-ago",diffDates.get(DateUtil.DIFF_DAYS) );

      } else if (23 < diffDates.get(DateUtil.DIFF_HOURS)) {
        sinceMessage = LanguageUtil.get(locale, "yesterday");
      } else if (1 < diffDates.get(DateUtil.DIFF_HOURS)) {
        sinceMessage =  LanguageUtil.format(locale, "x-hours-ago", diffDates.get(DateUtil.DIFF_HOURS) );
      } else if (1 == diffDates.get(DateUtil.DIFF_HOURS)) {
        sinceMessage = LanguageUtil.get(locale, "an-hour-ago");
      } else if (diffDates.get(DateUtil.DIFF_MINUTES) > 1) {
        sinceMessage =  LanguageUtil.format(locale, "x-minutes-ago", diffDates.get(DateUtil.DIFF_MINUTES) );
      } else {
        sinceMessage = LanguageUtil.get(locale, "seconds-ago");
      }
    } catch (Exception e) {

    }
    return sinceMessage;
  }

  public static String prettyDateSince(Date date) {
    return prettyDateSince(date, null);
  }

  public static String prettyDateSinceWithDate(Date date, Locale locale) {
    if (locale == null) {
      Company company = PublicCompanyFactory.getDefaultCompany();
      locale = company.getLocale();
    }
    SimpleDateFormat sdf = new SimpleDateFormat("h:mm aa, MMMM d?, yyyy", locale);
    String modDate = sdf.format(date);
    modDate = modDate.replaceAll("\\?", "th");

    return prettyDateSince(date, locale) + " (" + modDate + ")";

  }

  public static String prettyDateSinceWithDate(Date date) {
    return prettyDateSinceWithDate(date, null);
  }

  public static String getCurrentDate() {
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date now = Calendar.getInstance().getTime();
    String date = df.format(now);
    return date;
  }

}
TOP

Related Classes of com.dotmarketing.util.DateUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.