package eu.kielczewski.akanke.web.service.viewhelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
class RelativeDateToStringConverter {
private static final Logger LOGGER = LoggerFactory.getLogger(RelativeDateToStringConverter.class);
private static final long MILLISECONDS_IN_SECOND = 1000;
private static final long MINUTES_IN_HOUR = 60;
private static final long DAYS_IN_MONTH = 30;
private static final long HOURS_IN_DAY = 24;
private static final long DAYS_IN_YEAR = 365;
private static final long ONE_MINUTE = 60000;
private static final long ONE_HOUR = 60 * ONE_MINUTE;
private static final long ONE_DAY = 24 * ONE_HOUR;
private static final long ONE_MONTH = 30 * ONE_DAY;
private static final long ONE_YEAR = 12 * ONE_MONTH;
public String convert(Date date) {
LOGGER.debug("Converting {} to string", date);
long delta = new Date().getTime() - date.getTime();
if (delta < 2 * ONE_MINUTE) {
return "just now";
}
if (delta < ONE_HOUR) {
return toMinutes(delta) + " minutes ago";
}
if (delta < 2 * ONE_HOUR) {
return "1 hour ago";
}
if (delta < ONE_DAY) {
return toHours(delta) + " hours ago";
}
if (delta < 2 * ONE_DAY) {
return "yesterday";
}
if (delta < ONE_MONTH) {
return toDays(delta) + " days ago";
}
if (delta < ONE_YEAR) {
long months = toMonths(delta);
if (months <= 1) {
return "one month ago";
} else {
return months + " months ago";
}
} else {
long years = toYears(delta);
if (years <= 1) {
return "one year ago";
} else {
return years + " years ago";
}
}
}
private long toSeconds(long date) {
return date / MILLISECONDS_IN_SECOND;
}
private long toMinutes(long date) {
return toSeconds(date) / MINUTES_IN_HOUR;
}
private long toHours(long date) {
return toMinutes(date) / MINUTES_IN_HOUR;
}
private long toDays(long date) {
return toHours(date) / HOURS_IN_DAY;
}
private long toMonths(long date) {
return toDays(date) / DAYS_IN_MONTH;
}
private long toYears(long date) {
return toMonths(date) / DAYS_IN_YEAR;
}
}