This is what I did, it works for me, but I'm sure it can be improved, or even there may be a hidden (for me) class that does this ...
package javatest;
import java.util.Date;
public class Main {
public static void main(String[] args) {
long segundo = 1000;
long minuto = segundo * 60;
long hora = minuto * 60;
long dia = hora * 24;
long semana = dia * 7;
long mes = dia * 30;
long anio = mes * 12;
long startDate = new Date().getTime();
startDate = startDate - (mes);
long endDate = new Date().getTime();
System.out.println("Inicio: " + new Date(startDate));
System.out.println("Final: " + new Date(endDate));
System.out.println(PrettifyDateDiff(endDate - startDate, true));
}
private static String PrettifyDateDiff(long dateDiff, boolean showDisclaimer) {
long second = 1000;
long minute = second * 60;
long hour = minute * 60;
long day = hour * 24;
long week = day * 7;
long month = day * 30;
long year = month * 12;
long minutes = dateDiff / minute;
long hours = dateDiff / hour;
long days = dateDiff / day;
long weeks = dateDiff / week;
long months = dateDiff / month;
long years = dateDiff / year;
String prettyDateString = "";
if (minutes > 60) {
prettyDateString = minutes - (hours * 60) + " minutos.";
if (hours > 24) {
prettyDateString = hours - (days * 24) + " horas " + prettyDateString;
if (days > 7) {
prettyDateString = days - (weeks * 7) + " dias " + prettyDateString;
if(weeks > 4){
prettyDateString = weeks - (months * 4) + " semanas " + prettyDateString;
if(months > 12){
prettyDateString = months - (years * 12) + " meses " + prettyDateString;
if(years > 0){
prettyDateString = years + " años " + prettyDateString;
}
}else{
prettyDateString = months + " meses " + prettyDateString;
}
}else{
prettyDateString = weeks + " semanas " + prettyDateString;
}
} else {
prettyDateString = days + " dias " + prettyDateString;
}
} else {
prettyDateString = hours + " horas " + prettyDateString;
}
} else {
prettyDateString = minutes + " minutos.";
}
if(showDisclaimer && (weeks > 0 || months > 0)){
prettyDateString += " (Semanas de 7 dias, Meses de 30 dias).";
}
return prettyDateString;
}
}
source
share