/** * Developed as a part of the MDroid project. Check project repository for License. * * Link: https://github.com/praveendath92/MDroid */ package in.co.praveenkumar.mdroid.helper; import java.util.Calendar; /** * Time formatter. * * Offers time formats for section title and other methods * * @author Praveen Kumar Pendyala(praveen@praveenkumar.co.in) * */ public class TimeFormat { /** * Evaluates a section title suitable for the given time stamp. For use in * Calender fragment. * * @param time * in seconds * @return section title */ public static String getSectionTitle(int time) { long ltime = ((long) time) * 1000; Calendar c = Calendar.getInstance(); int nowDay = c.get(Calendar.DATE); int nowMonth = c.get(Calendar.MONTH); int nowYear = c.get(Calendar.YEAR); c.setTimeInMillis(ltime); int givenDay = c.get(Calendar.DATE); int givenMonth = c.get(Calendar.MONTH); int givenYear = c.get(Calendar.YEAR); // Past if (time * 1000 < System.currentTimeMillis()) { if (nowYear - givenYear > 1) return (nowYear - givenYear) + " years ago"; else if (nowYear - givenYear == 1) return "1 year ago"; else if (nowMonth - givenMonth > 1) return (nowMonth - givenMonth) + " months ago"; else if (nowMonth - givenMonth == 1) return "1 month ago"; else if (nowDay - givenDay > 1) return (nowDay - givenDay) + " days ago"; else if (nowDay - givenDay == 1) return "Yesterday"; else return "Today"; } // Future else { if (givenYear - nowYear > 1) return "In " + (givenYear - nowYear) + " years"; else if (givenYear - nowYear == 1) return "In 1 year"; else if (givenMonth - nowMonth > 1) return "In " + (givenMonth - nowMonth) + " months"; else if (givenMonth - nowMonth == 1) return "In 1 month"; else if (givenDay - nowDay > 1) return "In " + (givenDay - nowDay) + " days"; else if (givenDay - nowDay == 1) return "Tomorrow"; else return "Today"; } } /** * Evaluates relative time for given time stamp. The outputs could looks * like,<br/> * <b> For past </b><br/> * 2 years ago <br/> * 3 months ago <br/> * 5 minutes ago <br/> * A moment ago <br/> * <br/> * <b> For furture </b><br/> * In 2 years<br/> * In 3 months<br/> * In 5 minutes<br/> * In a moment<br/> * <br/> * * <b>Note:</b> Plural and singular of the numbers are also considered. Like * 1 minute ago and 2 minutes ago<br/> * * @param time * in seconds * @return neat relative time string */ public static String getNiceRelativeTime(int time) { long ltime = ((long) time) * 1000; Calendar c = Calendar.getInstance(); int nowMin = c.get(Calendar.MINUTE); int nowHour = c.get(Calendar.HOUR_OF_DAY); int nowDay = c.get(Calendar.DATE); int nowMonth = c.get(Calendar.MONTH); int nowYear = c.get(Calendar.YEAR); c.setTimeInMillis(ltime); int givenMin = c.get(Calendar.MINUTE); int givenHour = c.get(Calendar.HOUR_OF_DAY); int givenDay = c.get(Calendar.DATE); int givenMonth = c.get(Calendar.MONTH); int givenYear = c.get(Calendar.YEAR); // Past if (time * 1000 < System.currentTimeMillis()) { if (nowYear - givenYear > 1) return (nowYear - givenYear) + " years ago"; else if (nowYear - givenYear == 1) return "1 year ago"; else if (nowMonth - givenMonth > 1) return (nowMonth - givenMonth) + " months ago"; else if (nowMonth - givenMonth == 1) return "1 month ago"; else if (nowDay - givenDay > 1) return (nowDay - givenDay) + " days ago"; else if (nowDay - givenDay == 1) return "Yesterday"; else if (nowHour - givenHour > 1) return (nowHour - givenHour) + " hours ago"; else if (nowHour - givenHour == 1) return "1 hour ago"; else if (nowMin - givenMin > 1) return (nowMin - givenMin) + " minutes ago"; else if (nowMin - givenMin == 1) return "1 minute ago"; else return "A moment ago"; } // Future else { if (givenYear - nowYear > 1) return "In " + (givenYear - nowYear) + " years"; else if (givenYear - nowYear == 1) return "In 1 year"; else if (givenMonth - nowMonth > 1) return "In " + (givenMonth - nowMonth) + " months"; else if (givenMonth - nowMonth == 1) return "In 1 month"; else if (givenDay - nowDay > 1) return "In " + (givenDay - nowDay) + " days"; else if (givenDay - nowDay == 1) return "Tomorrow"; else if (givenHour - nowHour > 1) return "In " + (givenHour - nowHour) + " hours"; else if (givenHour - nowHour == 1) return "In 1 hour"; else if (givenMin - nowMin > 1) return "In " + (givenMin - nowMin) + " minutes"; else if (givenMin - nowMin == 1) return "In 1 minute"; else return "In a moment"; } } /** * Evaluates a simple more reader friendly time format like 23 Feb 12:23 AM * * If the year in the time stamp is not the current year then the format * would look like 23 Feb '13 12:23 AM * * @param time * in seconds * @return formatted time */ public static String getNiceTime(int time) { // When time is 0 if (time == 0) return ""; long ltime = ((long) time) * 1000; Calendar c = Calendar.getInstance(); int yearnow = c.get(Calendar.YEAR); c.setTimeInMillis(ltime); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); int hour = c.get(Calendar.HOUR); int minute = c.get(Calendar.MINUTE); String AmPm = (c.get(Calendar.AM_PM) == Calendar.AM) ? "AM" : "PM"; // Because 12:07 AM better than 12:7 AM String mins = (minute > 9) ? String.valueOf(minute): "0" + minute; if (year == yearnow || String.valueOf(year).length() != 4) return day + " " + getMonthName(month) + " " + hour + ":" + mins + " " + AmPm; String yearString = String.valueOf(year); yearString = yearString.substring(yearString.length() - 2, yearString.length()); return day + " " + getMonthName(month) + " '" + yearString + " " + hour + ":" + mins + " " + AmPm; } private static String getMonthName(int month) { // Month name switch (month) { case Calendar.JANUARY: return "Jan"; case Calendar.FEBRUARY: return "Feb"; case Calendar.MARCH: return "Mar"; case Calendar.APRIL: return "Apr"; case Calendar.MAY: return "May"; case Calendar.JUNE: return "Jun"; case Calendar.JULY: return "Jul"; case Calendar.AUGUST: return "Aug"; case Calendar.SEPTEMBER: return "Sep"; case Calendar.OCTOBER: return "Oct"; case Calendar.NOVEMBER: return "Nov"; case Calendar.DECEMBER: return "Dec"; default: return "Err"; } } }