Skip to content

Instantly share code, notes, and snippets.

@piyush-malaviya
Last active December 7, 2018 09:36
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save piyush-malaviya/059761f7e51aa5f6960836e6cdcff575 to your computer and use it in GitHub Desktop.
Save piyush-malaviya/059761f7e51aa5f6960836e6cdcff575 to your computer and use it in GitHub Desktop.
import java.util.Calendar;
public class DateTimeUtils {
private static final long SEC = 1000;
private static final long MIN = SEC * 60;
private static final long HOUR = MIN * 60;
private static final long DAY = HOUR * 24;
private static final long WEEK = DAY * 7;
private static final long YESTERDAY = DAY * 2;
private static final long YEAR = DAY * 365;
private static final long MONTH;
static {
int dayInFebruary = 28;
int year = Calendar.getInstance().get(Calendar.YEAR);
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
dayInFebruary = 29;
}
int[] DAY_IN_MONTH = new int[]{31, dayInFebruary, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
MONTH = DAY * (DAY_IN_MONTH[Calendar.getInstance().get(Calendar.MONTH)]);
}
private DateTimeUtils() {
}
public static ArrayList<Long> getWeekDayArray(long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
Long[] dayValues = new Long[7];
long ONE_DAY_IN_MILLIS = TimeUnit.DAYS.toMillis(1);
for (int pos = 0; pos < dayOfWeek; pos++) {
dayValues[dayOfWeek - 1 - pos] = calendar.getTimeInMillis();
calendar.setTimeInMillis(calendar.getTimeInMillis() - ONE_DAY_IN_MILLIS);
}
calendar.setTimeInMillis(date);
for (int pos = dayOfWeek - 1; pos < 7; pos++) {
dayValues[pos] = calendar.getTimeInMillis();
calendar.setTimeInMillis(calendar.getTimeInMillis() + ONE_DAY_IN_MILLIS);
}
return new ArrayList<>(Arrays.asList(dayValues));
}
/**
* show formatted time from now
*/
public static String fromNow(long firstTime, long secondTime) {
StringBuilder stringBuilder = new StringBuilder();
long diff = Math.abs(secondTime - firstTime);
// year
long year = getYear(diff);
if (year > 0) {
stringBuilder.append(year).append(" year");
if (year > 1) {
stringBuilder.append("s");
}
stringBuilder.append(" ");
diff = (diff - (YEAR * year));
}
// month
long month = getMonth(diff);
if (month > 0) {
stringBuilder.append(month).append(" month");
if (month > 1) {
stringBuilder.append("s");
}
stringBuilder.append(" ");
diff = diff - (MONTH * month);
}
// week
long week = getWeek(diff);
if (week > 0) {
stringBuilder.append(week).append(" week");
if (week > 1) {
stringBuilder.append("s");
}
stringBuilder.append(" ");
diff = diff - (WEEK * week);
}
// day
long day = getDay(diff);
if (day > 0) {
stringBuilder.append(day).append(" day");
if (day > 1) {
stringBuilder.append("s");
}
stringBuilder.append(" ");
diff = diff - (DAY * day);
}
// hour
long hour = getHour(diff);
if (hour > 0) {
stringBuilder.append(hour).append(" hour");
if (hour > 1) {
stringBuilder.append("s");
}
stringBuilder.append(" ");
diff = diff - (HOUR * hour);
}
// minute
long minute = getMinute(diff);
if (minute > 0) {
stringBuilder.append(minute).append(" minute");
if (minute > 1) {
stringBuilder.append("s");
}
stringBuilder.append(" ");
diff = diff - (MIN * minute);
}
// second
long second = getSecond(diff);
if (minute > 0) {
stringBuilder.append(second).append(" second");
if (second > 1) {
stringBuilder.append("s");
}
//stringBuilder.append(" ");
//diff = diff - (SEC * second);
}
return stringBuilder.toString();
}
public static long getSecond(long time) {
return time / SEC;
}
public static long getMinute(long time) {
return time / MIN;
}
public static long getHour(long time) {
return time / HOUR;
}
public static long getDay(long time) {
return time / DAY;
}
public static long getWeek(long time) {
return time / WEEK;
}
public static long getMonth(long time) {
return time / MONTH;
}
public static long getYear(long time) {
return time / YEAR;
}
}
/**
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date startDate = simpleDateFormat.parse("2016-05-01 18:25:10");
Date endDate = simpleDateFormat.parse("2017-07-25 20:00:00");
String dateFormatted = DateTimeUtils.fromNow(startDate.getTime(), endDate.getTime());
Log.e(TAG, "onCreate: " + dateFormatted);
} catch (ParseException e) {
e.printStackTrace();
}
Output:
onCreate: 1 year 2 months 3 weeks 2 days 1 hour 34 minutes 50 seconds
**/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment